// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build js,wasm package time import ( "runtime" "syscall/js" ) var zoneSources = []string{ "/usr/share/zoneinfo/", "/usr/share/lib/zoneinfo/", "/usr/lib/locale/TZ/", runtime.GOROOT() + "/lib/time/zoneinfo.zip", } func initLocal() { localLoc.name = "Local" z := zone{} d := js.Global().Get("Date").New() offset := d.Call("getTimezoneOffset").Int() * -1 z.offset = offset * 60 // According to https://tc39.github.io/ecma262/#sec-timezoneestring, // the timezone name from (new Date()).toTimeString() is an implementation-dependent // result, and in Google Chrome, it gives the fully expanded name rather than // the abbreviation. // Hence, we construct the name from the offset. z.name = "UTC" if offset < 0 { z.name += "-" } else { z.name += "+" } z.name += itoa(offset / 60) min := offset % 60 if min != 0 { z.name += ":" + itoa(min) } localLoc.zone = []zone{z} } // itoa is just the fast path implementation copied from strconv.Itoa. // No timezone hour can exceed 100, so the fast path will always satisfy. func itoa(i int) string { if i < 10 { return digits[i : i+1] } return smallsString[i*2 : i*2+2] } const smallsString = "00010203040506070809" + "10111213141516171819" + "20212223242526272829" + "30313233343536373839" + "40414243444546474849" + "50515253545556575859" + "60616263646566676869" + "70717273747576777879" + "80818283848586878889" + "90919293949596979899" const digits = "0123456789"