1function shouldBe(actual, expected) {
2 if (actual !== expected)
3 throw new Error("bad value: " + actual);
4}
5
6let timeZoneNames = ["short", "long", "shortOffset", "longOffset", "shortGeneric", "longGeneric"];
7let date = new Date(1625939282389);
8
9function timeZoneTest(date, locale, expectedSet, timeZone = "America/Los_Angeles")
10{
11 timeZoneNames.forEach(function(timeZoneName) {
12 let formatter = new Intl.DateTimeFormat(locale, {
13 year: "numeric",
14 month: "numeric",
15 day: "numeric",
16 hour: "2-digit",
17 minute: "2-digit",
18 second: "2-digit",
19 timeZone,
20 timeZoneName
21 });
22 let actual = formatter.format(date);
23 shouldBe(actual, expectedSet[timeZoneName]);
24 // print(`${timeZoneName}: "${actual}",`);
25 });
26}
27
28if ($vm.icuVersion() > 64) {
29 timeZoneTest(date, "en", {
30 short: "7/10/2021, 10:48:02 AM PDT",
31 long: "7/10/2021, 10:48:02 AM Pacific Daylight Time",
32 shortOffset: "7/10/2021, 10:48:02 AM GMT-7",
33 longOffset: "7/10/2021, 10:48:02 AM GMT-07:00",
34 shortGeneric: "7/10/2021, 10:48:02 AM PT",
35 longGeneric: "7/10/2021, 10:48:02 AM Pacific Time",
36 });
37
38 timeZoneTest(date, "en", {
39 short: "7/10/2021, 11:18:02 PM GMT+5:30",
40 long: "7/10/2021, 11:18:02 PM India Standard Time",
41 shortOffset: "7/10/2021, 11:18:02 PM GMT+5:30",
42 longOffset: "7/10/2021, 11:18:02 PM GMT+05:30",
43 shortGeneric: "7/10/2021, 11:18:02 PM India Time",
44 longGeneric: "7/10/2021, 11:18:02 PM India Standard Time",
45 }, "Asia/Calcutta");
46
47 timeZoneTest(date, "zh-Hant", {
48 short: "2021/7/10 PDT 上午10:48:02",
49 long: "2021/7/10 太平洋夏令時間 上午10:48:02",
50 shortOffset: "2021/7/10 GMT-7 上午10:48:02",
51 longOffset: "2021/7/10 GMT-07:00 上午10:48:02",
52 shortGeneric: "2021/7/10 PT 上午10:48:02",
53 longGeneric: "2021/7/10 太平洋時間 上午10:48:02",
54 });
55
56 timeZoneTest(date, "ja-JP", {
57 short: "2021/7/10 10:48:02 GMT-7",
58 long: "2021/7/10 10時48分02秒 アメリカ太平洋夏時間",
59 shortOffset: "2021/7/10 10時48分02秒 GMT-7",
60 longOffset: "2021/7/10 10時48分02秒 GMT-07:00",
61 shortGeneric: "2021/7/10 10:48:02 ロサンゼルス時間",
62 longGeneric: "2021/7/10 10:48:02 アメリカ太平洋時間",
63 });
64
65 timeZoneTest(date, "ja-JP", {
66 short: "2021/7/11 02:48:02 JST",
67 long: "2021/7/11 02時48分02秒 日本標準時",
68 shortOffset: "2021/7/11 02時48分02秒 GMT+9",
69 longOffset: "2021/7/11 02時48分02秒 GMT+09:00",
70 shortGeneric: "2021/7/11 02:48:02 JST",
71 longGeneric: "2021/7/11 02:48:02 日本標準時",
72 }, "Asia/Tokyo");
73}