systemZone.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { formatOffset, parseZoneInfo } from "../impl/util.js";
  2. import Zone from "../zone.js";
  3. let singleton = null;
  4. /**
  5. * Represents the local zone for this JavaScript environment.
  6. * @implements {Zone}
  7. */
  8. export default class SystemZone extends Zone {
  9. /**
  10. * Get a singleton instance of the local zone
  11. * @return {SystemZone}
  12. */
  13. static get instance() {
  14. if (singleton === null) {
  15. singleton = new SystemZone();
  16. }
  17. return singleton;
  18. }
  19. /** @override **/
  20. get type() {
  21. return "system";
  22. }
  23. /** @override **/
  24. get name() {
  25. return new Intl.DateTimeFormat().resolvedOptions().timeZone;
  26. }
  27. /** @override **/
  28. get isUniversal() {
  29. return false;
  30. }
  31. /** @override **/
  32. offsetName(ts, { format, locale }) {
  33. return parseZoneInfo(ts, format, locale);
  34. }
  35. /** @override **/
  36. formatOffset(ts, format) {
  37. return formatOffset(this.offset(ts), format);
  38. }
  39. /** @override **/
  40. offset(ts) {
  41. return -new Date(ts).getTimezoneOffset();
  42. }
  43. /** @override **/
  44. equals(otherZone) {
  45. return otherZone.type === "system";
  46. }
  47. /** @override **/
  48. get isValid() {
  49. return true;
  50. }
  51. }