You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.1 KiB
62 lines
1.1 KiB
import { formatOffset, parseZoneInfo } from "../impl/util.js";
|
|
import Zone from "../zone.js";
|
|
|
|
let singleton = null;
|
|
|
|
/**
|
|
* Represents the local zone for this JavaScript environment.
|
|
* @implements {Zone}
|
|
*/
|
|
export default class SystemZone extends Zone {
|
|
/**
|
|
* Get a singleton instance of the local zone
|
|
* @return {SystemZone}
|
|
*/
|
|
static get instance() {
|
|
if (singleton === null) {
|
|
singleton = new SystemZone();
|
|
}
|
|
return singleton;
|
|
}
|
|
|
|
/** @override **/
|
|
get type() {
|
|
return "system";
|
|
}
|
|
|
|
/** @override **/
|
|
get name() {
|
|
return new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
}
|
|
|
|
/** @override **/
|
|
get isUniversal() {
|
|
return false;
|
|
}
|
|
|
|
/** @override **/
|
|
offsetName(ts, { format, locale }) {
|
|
return parseZoneInfo(ts, format, locale);
|
|
}
|
|
|
|
/** @override **/
|
|
formatOffset(ts, format) {
|
|
return formatOffset(this.offset(ts), format);
|
|
}
|
|
|
|
/** @override **/
|
|
offset(ts) {
|
|
return -new Date(ts).getTimezoneOffset();
|
|
}
|
|
|
|
/** @override **/
|
|
equals(otherZone) {
|
|
return otherZone.type === "system";
|
|
}
|
|
|
|
/** @override **/
|
|
get isValid() {
|
|
return true;
|
|
}
|
|
}
|