webtools/cmds/clocks/main.go

88 lines
1.5 KiB
Go
Raw Permalink Normal View History

2025-09-25 22:13:29 +00:00
//go:build js
package main
import (
"log"
"time"
_ "time/tzdata"
)
func main() {
melTime, err := time.LoadLocation("Australia/Melbourne")
if err != nil {
log.Fatal(err)
}
sg, err := time.LoadLocation("Asia/Singapore")
if err != nil {
log.Fatal(err)
}
nyc, err := time.LoadLocation("America/New_York")
if err != nil {
log.Fatal(err)
}
la, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
log.Fatal(err)
}
utc := time.UTC
clocks := []clock{
{
name: "UTC",
loc: utc,
elements: findClockElements("utc"),
},
{
name: "Australia/Melbourne",
loc: melTime,
elements: findClockElements("mel"),
},
{
name: "Asia/Singapore",
loc: sg,
elements: findClockElements("sg"),
},
{
name: "America/New_York",
loc: nyc,
elements: findClockElements("nyc"),
},
{
name: "America/Los_Angeles",
loc: la,
elements: findClockElements("la"),
},
}
updateClocks(clocks)
go startClockUpdater(clocks)
<-make(chan struct{})
}
func startClockUpdater(clocks []clock) {
for range time.Tick(1 * time.Second) {
updateClocks(clocks)
}
}
func updateClocks(clocks []clock) {
n := time.Now()
for _, c := range clocks {
updateClock(n, c)
}
}
func updateClock(t time.Time, clk clock) {
lt := t.In(clk.loc)
clk.elements.locationDiv.Set("innerText", clk.name)
clk.elements.dateDiv.Set("innerText", lt.Format("02 Jan 2006"))
clk.elements.timeDiv.Set("innerText", lt.Format("15:04:05"))
}