25 lines
706 B
JavaScript
25 lines
706 B
JavaScript
// Shared 1 Hz clock. Module-level $state + a single interval, so every consumer
|
|
// (status bar, footer) shares one timer. Read `clock.now` reactively.
|
|
|
|
let _now = $state(new Date())
|
|
|
|
if (typeof window !== 'undefined') {
|
|
setInterval(() => { _now = new Date() }, 1000)
|
|
}
|
|
|
|
export const clock = {
|
|
get now() { return _now },
|
|
}
|
|
|
|
// Playful "stardate" derived from the wall clock, purely cosmetic.
|
|
export function stardate(d) {
|
|
const epoch = Date.UTC(2350, 0, 1)
|
|
const days = (d.getTime() - epoch) / 86_400_000
|
|
return (47000 + days / 3.65).toFixed(1)
|
|
}
|
|
|
|
export function hhmmss(d) {
|
|
const p = (n) => String(n).padStart(2, '0')
|
|
return `${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`
|
|
}
|