tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

time-zones-imported.js (33464B)


      1 // |reftest| skip-if(winWidget||!this.hasOwnProperty("Intl")) -- Windows doesn't accept IANA names for the TZ env variable; Requires ICU time zone support
      2 
      3 // Imported tests from es6draft and then adapted to use ICU/CLDR time zone display names.
      4 
      5 function assertSame(expected, actual, message = undefined) {
      6  if (message !== undefined)
      7    assertEq(actual, expected, String(message));
      8  else
      9    assertEq(actual, expected);
     10 }
     11 
     12 function assertTrue(actual, message = undefined) {
     13  assertSame(true, actual, message);
     14 }
     15 
     16 // File: lib/datetime.jsm
     17 const {
     18  DayOfWeek,
     19  Month,
     20  DateTime,
     21  TimeZone,
     22  Format,
     23 } = (function() {
     24 
     25 // 5.2 Algorithm Conventions
     26 function modulo(dividend, divisor) {
     27  assertTrue(typeof dividend === "number");
     28  assertTrue(typeof divisor === "number");
     29  assertTrue(divisor !== 0 && Number.isFinite(divisor));
     30  let remainder = dividend % divisor;
     31  // NB: add +0 to convert -0 to +0
     32  return (remainder >= 0 ? remainder + 0 : remainder + divisor);
     33 }
     34 
     35 // 7.1.4 ToInteger ( argument )
     36 function ToInteger(number) {
     37  /* steps 1-2 */
     38  assertTrue(typeof number === "number");
     39  /* step 3 */
     40  if (Number.isNaN(number))
     41    return +0.0;
     42  /* step 4 */
     43  if (number == 0.0 || !Number.isFinite(number))
     44    return number;
     45  /* step 5 */
     46  return Math.sign(number) * Math.floor(Math.abs(number));
     47 }
     48 
     49 // 20.3.1.2 Day Number and Time within Day
     50 const msPerDay = 86400000;
     51 
     52 // 20.3.1.2 Day Number and Time within Day
     53 function Day(t) {
     54  assertTrue(typeof t === "number");
     55  return Math.floor(t / msPerDay);
     56 }
     57 
     58 // 20.3.1.2 Day Number and Time within Day
     59 function TimeWithinDay(t) {
     60  assertTrue(typeof t === "number");
     61  return modulo(t, msPerDay);
     62 }
     63 
     64 // 20.3.1.3 Year Number
     65 function DaysInYear(y) {
     66  assertTrue(typeof y === "number");
     67  if (y % 4 !== 0) {
     68    return 365;
     69  }
     70  if (y % 100 !== 0) {
     71    return 366;
     72  }
     73  if (y % 400 !== 0) {
     74    return 365;
     75  }
     76  return 366;
     77 }
     78 
     79 // 20.3.1.3 Year Number
     80 function DayFromYear(y) {
     81  assertTrue(typeof y === "number");
     82  return 365 * (y - 1970) + Math.floor((y - 1969) / 4) - Math.floor((y - 1901) / 100) + Math.floor((y - 1601) / 400);
     83 }
     84 
     85 // 20.3.1.3 Year Number
     86 function TimeFromYear(y) {
     87  assertTrue(typeof y === "number");
     88  return msPerDay * DayFromYear(y);
     89 }
     90 
     91 // TODO: fill in rest
     92 
     93 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
     94 const HoursPerDay = 24;
     95 const MinutesPerHour = 60;
     96 const SecondsPerMinute = 60;
     97 const msPerSecond = 1000;
     98 const msPerMinute = msPerSecond * SecondsPerMinute;
     99 const msPerHour = msPerMinute * MinutesPerHour;
    100 
    101 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
    102 function HourFromTime(t) {
    103  assertTrue(typeof t === "number");
    104  return modulo(Math.floor(t / msPerHour), HoursPerDay);
    105 }
    106 
    107 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
    108 function MinFromTime(t) {
    109  assertTrue(typeof t === "number");
    110  return modulo(Math.floor(t / msPerMinute), MinutesPerHour);
    111 }
    112 
    113 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
    114 function SecFromTime(t) {
    115  assertTrue(typeof t === "number");
    116  return modulo(Math.floor(t / msPerSecond), SecondsPerMinute);
    117 }
    118 
    119 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
    120 function msFromTime(t) {
    121  assertTrue(typeof t === "number");
    122  return modulo(t, msPerSecond);
    123 }
    124 
    125 // 20.3.1.11 MakeTime (hour, min, sec, ms)
    126 function MakeTime(hour, min, sec, ms) {
    127  assertTrue(typeof hour === "number");
    128  assertTrue(typeof min === "number");
    129  assertTrue(typeof sec === "number");
    130  assertTrue(typeof ms === "number");
    131  if (!Number.isFinite(hour) || !Number.isFinite(min) || !Number.isFinite(sec) || !Number.isFinite(ms)) {
    132    return Number.NaN;
    133  }
    134  let h = ToInteger(hour);
    135  let m = ToInteger(min);
    136  let s = ToInteger(sec);
    137  let milli = ToInteger(ms);
    138  let t = h * msPerHour + m * msPerMinute + s * msPerSecond + milli;
    139  return t;
    140 }
    141 
    142 // 20.3.1.12 MakeDay (year, month, date)
    143 function MakeDay(year, month, date) {
    144  assertTrue(typeof year === "number");
    145  assertTrue(typeof month === "number");
    146  assertTrue(typeof date === "number");
    147  if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(date)) {
    148    return Number.NaN;
    149  }
    150  let y = ToInteger(year);
    151  let m = ToInteger(month);
    152  let dt = ToInteger(date);
    153  let ym = y + Math.floor(m / 12);
    154  let mn = modulo(m, 12);
    155 
    156  const monthStart = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
    157  let day = Math.floor(TimeFromYear(ym) / msPerDay) + monthStart[mn];
    158  if (mn >= 2 && DaysInYear(ym) == 366) {
    159    day += 1;
    160  }
    161 
    162  return day + dt - 1;
    163 }
    164 
    165 // 20.3.1.13 MakeDate (day, time)
    166 function MakeDate(day, time) {
    167  assertTrue(typeof day === "number");
    168  assertTrue(typeof time === "number");
    169  if (!Number.isFinite(day) || !Number.isFinite(time)) {
    170    return Number.NaN;
    171  }
    172  return day * msPerDay + time;
    173 }
    174 
    175 // 20.3.1.14 TimeClip (time)
    176 function TimeClip(time) {
    177  assertTrue(typeof time === "number");
    178  if (!Number.isFinite(time)) {
    179    return Number.NaN;
    180  }
    181  if (Math.abs(time) > 8.64e15) {
    182    return Number.NaN;
    183  }
    184  return ToInteger(time) + (+0);
    185 }
    186 
    187 const DayOfWeek = {
    188  Sunday: 0,
    189  Monday: 1,
    190  Tuesday: 2,
    191  Wednesday: 3,
    192  Thursday: 4,
    193  Friday: 5,
    194  Saturday: 6,
    195 };
    196 
    197 const Month = {
    198  January: 0,
    199  February: 1,
    200  March: 2,
    201  April: 3,
    202  May: 4,
    203  June: 5,
    204  July: 6,
    205  August: 7,
    206  September: 8,
    207  October: 9,
    208  November: 10,
    209  December: 11,
    210 };
    211 
    212 const DateTime = {
    213  Local: class {
    214    constructor(year, month, day, weekday, hour = 0, minute = 0, second = 0, ms = 0) {
    215      Object.assign(this, {year, month, day, weekday, hour, minute, second, ms});
    216    }
    217 
    218    toDate() {
    219      return new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms);
    220    }
    221  },
    222  UTC: class {
    223    constructor(year, month, day, weekday, hour = 0, minute = 0, second = 0, ms = 0) {
    224      Object.assign(this, {year, month, day, weekday, hour, minute, second, ms});
    225    }
    226 
    227    toInstant() {
    228      return MakeDate(MakeDay(this.year, this.month, this.day), MakeTime(this.hour, this.minute, this.second, this.ms));
    229    }
    230  },
    231 };
    232 
    233 function TimeZone(hour, minute = 0, second = 0) {
    234  return new class TimeZone {
    235    constructor(hour, minute, second) {
    236      Object.assign(this, {hour, minute, second});
    237    }
    238 
    239    toOffset() {
    240      let offset = TimeZoneOffset(this.hour, this.minute, this.second);
    241      return offset !== 0 ? -offset : 0;
    242    }
    243  }(hour, minute, second);
    244 
    245  function TimeZoneOffset(hour, minute = 0, second = 0) {
    246    assertTrue(typeof hour === "number");
    247    assertTrue(typeof minute === "number");
    248    assertTrue(typeof second === "number");
    249    assertTrue(minute >= 0);
    250    assertTrue(second >= 0);
    251    if (hour < 0 || Object.is(-0, hour)) {
    252      return hour * MinutesPerHour - minute - (second / 60);
    253    }
    254    return hour * MinutesPerHour + minute + (second / 60);
    255  }
    256 }
    257 
    258 const Format = {
    259  Locale: "en-US",
    260  DateTime: {
    261    localeMatcher: "lookup",
    262    timeZone: void 0,
    263    weekday: "short",
    264    era: void 0,
    265    year: "numeric",
    266    month: "2-digit",
    267    day: "2-digit",
    268    hour: "2-digit",
    269    minute: "2-digit",
    270    second: "2-digit",
    271    timeZoneName: "short",
    272    formatMatcher: "best fit",
    273    hour12: void 0,
    274  },
    275  Date: {
    276    localeMatcher: "lookup",
    277    timeZone: void 0,
    278    weekday: "short",
    279    era: void 0,
    280    year: "numeric",
    281    month: "2-digit",
    282    day: "2-digit",
    283    hour: void 0,
    284    minute: void 0,
    285    second: void 0,
    286    timeZoneName: void 0,
    287    formatMatcher: "best fit",
    288    hour12: void 0,
    289  },
    290  Time: {
    291    localeMatcher: "lookup",
    292    timeZone: void 0,
    293    weekday: void 0,
    294    era: void 0,
    295    year: void 0,
    296    month: void 0,
    297    day: void 0,
    298    hour: "2-digit",
    299    minute: "2-digit",
    300    second: "2-digit",
    301    timeZoneName: "short",
    302    formatMatcher: "best fit",
    303    hour12: void 0,
    304  },
    305 };
    306 
    307 return {
    308  DayOfWeek,
    309  Month,
    310  DateTime,
    311  TimeZone,
    312  Format,
    313 };
    314 })();
    315 
    316 
    317 // File: lib/assert-datetime.js
    318 
    319 function assertDate(local, utc, timeZone, options, formatArgs) {
    320  let d = local.toDate();
    321  assertDateValue(d, utc.toInstant(), timeZone.toOffset());
    322  assertLocalDate(d, local);
    323  assertUTCDate(d, utc);
    324  assertDateString(d, options, formatArgs);
    325 }
    326 
    327 function assertDateValue(actual, dateValue, timeZoneOffset) {
    328  assertSame(dateValue, actual.valueOf(), `valueOf()[${dateValue - actual.valueOf()}]`);
    329  assertSame(dateValue, actual.getTime(), `valueOf()[${dateValue - actual.getTime()}]`);
    330  assertSame(timeZoneOffset, actual.getTimezoneOffset(), "getTimezoneOffset()");
    331 }
    332 
    333 function assertLocalDate(actual, {year, month, day, weekday, hour = 0, minute = 0, second = 0, ms = 0}) {
    334  assertSame(year, actual.getFullYear(), "getFullYear()");
    335  assertSame(month, actual.getMonth(), "getMonth()");
    336  assertSame(day, actual.getDate(), "getDate()");
    337  assertSame(weekday, actual.getDay(), "getDay()");
    338  assertSame(hour, actual.getHours(), "getHours()");
    339  assertSame(minute, actual.getMinutes(), "getMinutes()");
    340  assertSame(second, actual.getSeconds(), "getSeconds()");
    341  assertSame(ms, actual.getMilliseconds(), "getMilliseconds()");
    342 }
    343 
    344 function assertUTCDate(actual, {year, month, day, weekday, hour = 0, minute = 0, second = 0, ms = 0}) {
    345  assertSame(year, actual.getUTCFullYear(), "getUTCFullYear()");
    346  assertSame(month, actual.getUTCMonth(), "getUTCMonth()");
    347  assertSame(day, actual.getUTCDate(), "getUTCDate()");
    348  assertSame(weekday, actual.getUTCDay(), "getUTCDay()");
    349  assertSame(hour, actual.getUTCHours(), "getUTCHours()");
    350  assertSame(minute, actual.getUTCMinutes(), "getUTCMinutes()");
    351  assertSame(second, actual.getUTCSeconds(), "getUTCSeconds()");
    352  assertSame(ms, actual.getUTCMilliseconds(), "getUTCMilliseconds()");
    353 }
    354 
    355 function assertDateString(actual, options, formatArgs = {
    356  LocaleString: [Format.Locale, Format.DateTime],
    357  LocaleDateString: [Format.Locale, Format.Date],
    358  LocaleTimeString: [Format.Locale, Format.Time],
    359 }) {
    360  for (var key of Object.keys(options)) {
    361    var args = formatArgs[key] || [];
    362    assertSame(options[key], actual[`to${key}`](...args), `to${key}()`);
    363  }
    364 }
    365 
    366 
    367 // File: Date/Africa_Monrovia.js
    368 // Liberia was the last country to switch to UTC based offsets (1972 May).
    369 
    370 inTimeZone("Africa/Monrovia", () => {
    371 {
    372  let local = new DateTime.Local(1972, Month.January, 6, DayOfWeek.Thursday, 0, 0, 0);
    373  let utc = new DateTime.UTC(1972, Month.January, 6, DayOfWeek.Thursday, 0, 44, 30);
    374 
    375  assertDate(local, utc, TimeZone(-0,44,30), {
    376    String: "Thu Jan 06 1972 00:00:00 GMT-0044 (Greenwich Mean Time)",
    377    UTCString: "Thu, 06 Jan 1972 00:44:30 GMT",
    378  });
    379 }
    380 
    381 {
    382  let local = new DateTime.Local(1972, Month.January, 6, DayOfWeek.Thursday, 23, 59, 0);
    383  let utc = new DateTime.UTC(1972, Month.January, 7, DayOfWeek.Friday, 0, 43, 30);
    384 
    385  assertDate(local, utc, TimeZone(-0,44,30), {
    386    String: "Thu Jan 06 1972 23:59:00 GMT-0044 (Greenwich Mean Time)",
    387    UTCString: "Fri, 07 Jan 1972 00:43:30 GMT",
    388  });
    389 }
    390 
    391 {
    392  let local = new DateTime.Local(1972, Month.January, 7, DayOfWeek.Friday, 0, 0, 0);
    393  let utc = new DateTime.UTC(1972, Month.January, 7, DayOfWeek.Friday, 0, 44, 30);
    394 
    395  assertDateValue(local.toDate(), utc.toInstant(), TimeZone(+0).toOffset());
    396 
    397  assertDateString(local.toDate(), {
    398    String: "Fri Jan 07 1972 00:44:30 GMT+0000 (Greenwich Mean Time)",
    399    UTCString: "Fri, 07 Jan 1972 00:44:30 GMT",
    400  });
    401 }
    402 
    403 {
    404  let local = new DateTime.Local(1972, Month.January, 7, DayOfWeek.Friday, 0, 44, 30);
    405  let utc = new DateTime.UTC(1972, Month.January, 7, DayOfWeek.Friday, 0, 44, 30);
    406 
    407  assertDate(local, utc, TimeZone(+0), {
    408    String: "Fri Jan 07 1972 00:44:30 GMT+0000 (Greenwich Mean Time)",
    409    UTCString: "Fri, 07 Jan 1972 00:44:30 GMT",
    410  });
    411 }
    412 
    413 {
    414  let local = new DateTime.Local(1972, Month.January, 7, DayOfWeek.Friday, 0, 45, 0);
    415  let utc = new DateTime.UTC(1972, Month.January, 7, DayOfWeek.Friday, 0, 45, 0);
    416 
    417  assertDate(local, utc, TimeZone(+0), {
    418    String: "Fri Jan 07 1972 00:45:00 GMT+0000 (Greenwich Mean Time)",
    419    UTCString: "Fri, 07 Jan 1972 00:45:00 GMT",
    420  });
    421 }
    422 
    423 {
    424  let local = new DateTime.Local(1972, Month.January, 8, DayOfWeek.Saturday, 0, 0, 0);
    425  let utc = new DateTime.UTC(1972, Month.January, 8, DayOfWeek.Saturday, 0, 0, 0);
    426 
    427  assertDate(local, utc, TimeZone(+0), {
    428    String: "Sat Jan 08 1972 00:00:00 GMT+0000 (Greenwich Mean Time)",
    429    UTCString: "Sat, 08 Jan 1972 00:00:00 GMT",
    430  });
    431 }
    432 });
    433 
    434 
    435 // File: Date/Africa_Monrovia.js
    436 // Africa/Tripoli switched from +02:00 to +01:00 and back.
    437 
    438 inTimeZone("Africa/Tripoli", () => {
    439 {
    440  // +02:00 (standard time)
    441  let local = new DateTime.Local(2012, Month.November, 1, DayOfWeek.Thursday, 0, 0, 0);
    442  let utc = new DateTime.UTC(2012, Month.October, 31, DayOfWeek.Wednesday, 22, 0, 0);
    443 
    444  assertDate(local, utc, TimeZone(+2), {
    445    String: "Thu Nov 01 2012 00:00:00 GMT+0200 (Eastern European Standard Time)",
    446    UTCString: "Wed, 31 Oct 2012 22:00:00 GMT",
    447  });
    448 }
    449 
    450 {
    451  // +01:00 (standard time)
    452  let local = new DateTime.Local(2012, Month.December, 1, DayOfWeek.Saturday, 0, 0, 0);
    453  let utc = new DateTime.UTC(2012, Month.November, 30, DayOfWeek.Friday, 23, 0, 0);
    454 
    455  assertDate(local, utc, TimeZone(+1), {
    456    String: "Sat Dec 01 2012 00:00:00 GMT+0100 (Eastern European Standard Time)",
    457    UTCString: "Fri, 30 Nov 2012 23:00:00 GMT",
    458  });
    459 }
    460 
    461 {
    462  // +01:00 (daylight savings)
    463  let local = new DateTime.Local(2013, Month.October, 1, DayOfWeek.Tuesday, 0, 0, 0);
    464  let utc = new DateTime.UTC(2013, Month.September, 30, DayOfWeek.Monday, 22, 0, 0);
    465 
    466  assertDate(local, utc, TimeZone(+2), {
    467    String: "Tue Oct 01 2013 00:00:00 GMT+0200 (Eastern European Summer Time)",
    468    UTCString: "Mon, 30 Sep 2013 22:00:00 GMT",
    469  });
    470 }
    471 
    472 {
    473  // +02:00 (standard time)
    474  let local = new DateTime.Local(2013, Month.November, 1, DayOfWeek.Friday, 0, 0, 0);
    475  let utc = new DateTime.UTC(2013, Month.October, 31, DayOfWeek.Thursday, 22, 0, 0);
    476 
    477  assertDate(local, utc, TimeZone(+2), {
    478    String: "Fri Nov 01 2013 00:00:00 GMT+0200 (Eastern European Standard Time)",
    479    UTCString: "Thu, 31 Oct 2013 22:00:00 GMT",
    480  });
    481 }
    482 });
    483 
    484 
    485 // File: Date/America_Caracas.js
    486 // America/Caracas switched from -04:00 to -04:30 on 2007 Dec 9.
    487 
    488 inTimeZone("America/Caracas", () => {
    489 {
    490  // -04:00 (standard time)
    491  let local = new DateTime.Local(2007, Month.December, 5, DayOfWeek.Wednesday, 0, 0, 0);
    492  let utc = new DateTime.UTC(2007, Month.December, 5, DayOfWeek.Wednesday, 4, 0, 0);
    493 
    494  assertDate(local, utc, TimeZone(-4), {
    495    String: "Wed Dec 05 2007 00:00:00 GMT-0400 (Venezuela Time)",
    496    DateString: "Wed Dec 05 2007",
    497    TimeString: "00:00:00 GMT-0400 (Venezuela Time)",
    498    UTCString: "Wed, 05 Dec 2007 04:00:00 GMT",
    499    ISOString: "2007-12-05T04:00:00.000Z",
    500    LocaleString: "Wed, 12/05/2007, 12:00:00 AM GMT-4",
    501    LocaleDateString: "Wed, 12/05/2007",
    502    LocaleTimeString: "12:00:00 AM GMT-4",
    503  });
    504 }
    505 
    506 {
    507  // -04:30 (standard time)
    508  let local = new DateTime.Local(2007, Month.December, 12, DayOfWeek.Wednesday, 0, 0, 0);
    509  let utc = new DateTime.UTC(2007, Month.December, 12, DayOfWeek.Wednesday, 4, 30, 0);
    510 
    511  assertDate(local, utc, TimeZone(-4, 30), {
    512    String: "Wed Dec 12 2007 00:00:00 GMT-0430 (Venezuela Time)",
    513    DateString: "Wed Dec 12 2007",
    514    TimeString: "00:00:00 GMT-0430 (Venezuela Time)",
    515    UTCString: "Wed, 12 Dec 2007 04:30:00 GMT",
    516    ISOString: "2007-12-12T04:30:00.000Z",
    517    LocaleString: "Wed, 12/12/2007, 12:00:00 AM GMT-4:30",
    518    LocaleDateString: "Wed, 12/12/2007",
    519    LocaleTimeString: "12:00:00 AM GMT-4:30",
    520  });
    521 }
    522 });
    523 
    524 
    525 // File: Date/Australia_Lord_Howe.js
    526 // Australia/Lord_Howe time zone offset is +10:30 and daylight savings amount is 00:30.
    527 
    528 inTimeZone("Australia/Lord_Howe", () => {
    529 {
    530  // +10:30 (standard time)
    531  let local = new DateTime.Local(2010, Month.August, 1, DayOfWeek.Sunday, 0, 0, 0);
    532  let utc = new DateTime.UTC(2010, Month.July, 31, DayOfWeek.Saturday, 13, 30, 0);
    533 
    534  assertDate(local, utc, TimeZone(+10,30), {
    535    String: "Sun Aug 01 2010 00:00:00 GMT+1030 (Lord Howe Standard Time)",
    536    DateString: "Sun Aug 01 2010",
    537    TimeString: "00:00:00 GMT+1030 (Lord Howe Standard Time)",
    538    UTCString: "Sat, 31 Jul 2010 13:30:00 GMT",
    539    ISOString: "2010-07-31T13:30:00.000Z",
    540    LocaleString: "Sun, 08/01/2010, 12:00:00 AM GMT+10:30",
    541    LocaleDateString: "Sun, 08/01/2010",
    542    LocaleTimeString: "12:00:00 AM GMT+10:30",
    543  });
    544 }
    545 
    546 {
    547  // +10:30 (daylight savings)
    548  let local = new DateTime.Local(2010, Month.January, 3, DayOfWeek.Sunday, 0, 0, 0);
    549  let utc = new DateTime.UTC(2010, Month.January, 2, DayOfWeek.Saturday, 13, 0, 0);
    550 
    551  assertDate(local, utc, TimeZone(+11), {
    552    String: "Sun Jan 03 2010 00:00:00 GMT+1100 (Lord Howe Daylight Time)",
    553    DateString: "Sun Jan 03 2010",
    554    TimeString: "00:00:00 GMT+1100 (Lord Howe Daylight Time)",
    555    UTCString: "Sat, 02 Jan 2010 13:00:00 GMT",
    556    ISOString: "2010-01-02T13:00:00.000Z",
    557    LocaleString: "Sun, 01/03/2010, 12:00:00 AM GMT+11",
    558    LocaleDateString: "Sun, 01/03/2010",
    559    LocaleTimeString: "12:00:00 AM GMT+11",
    560  });
    561 }
    562 });
    563 
    564 
    565 // File: Date/Europe_Amsterdam.js
    566 // Europe/Amsterdam as an example for mean time like timezones after LMT (AMT, NST).
    567 //
    568 // tzdata2022b changed Europe/Amsterdam into a link to Europe/Brussels.
    569 
    570 inTimeZone("Europe/Amsterdam", () => {
    571 {
    572  let local = new DateTime.Local(1935, Month.January, 1, DayOfWeek.Tuesday, 0, 0, 0);
    573  let utc = new DateTime.UTC(1935, Month.January, 1, DayOfWeek.Tuesday, 0, 0, 0);
    574 
    575  assertDate(local, utc, TimeZone(+0,0,0), {
    576    String: "Tue Jan 01 1935 00:00:00 GMT+0000 (Central European Standard Time)",
    577    UTCString: "Tue, 01 Jan 1935 00:00:00 GMT",
    578  });
    579 }
    580 
    581 {
    582  let local = new DateTime.Local(1935, Month.July, 1, DayOfWeek.Monday, 0, 0, 0);
    583  let utc = new DateTime.UTC(1935, Month.June, 30, DayOfWeek.Sunday, 23, 0, 0);
    584 
    585  assertDate(local, utc, TimeZone(+1,0,0), {
    586    String: "Mon Jul 01 1935 00:00:00 GMT+0100 (Central European Summer Time)",
    587    UTCString: "Sun, 30 Jun 1935 23:00:00 GMT",
    588  });
    589 }
    590 });
    591 
    592 // Use America/St_Johns as a replacement for the Europe/Amsterdam test case.
    593 //
    594 // Zone America/St_Johns as an example for mean time like timezones after LMT (NST, NDT).
    595 
    596 inTimeZone("America/St_Johns", () => {
    597 {
    598  let local = new DateTime.Local(1917, Month.January, 1, DayOfWeek.Monday, 0, 0, 0);
    599  let utc = new DateTime.UTC(1917, Month.January, 1, DayOfWeek.Monday, 3, 30, 52);
    600 
    601  assertDate(local, utc, TimeZone(-3,30,52), {
    602    String: "Mon Jan 01 1917 00:00:00 GMT-0330 (Newfoundland Standard Time)",
    603    UTCString: "Mon, 01 Jan 1917 03:30:52 GMT",
    604  });
    605 }
    606 
    607 {
    608  let local = new DateTime.Local(1917, Month.July, 1, DayOfWeek.Sunday, 0, 0, 0);
    609  let utc = new DateTime.UTC(1917, Month.July, 1, DayOfWeek.Sunday, 2, 30, 52);
    610 
    611  assertDate(local, utc, TimeZone(-2,30,52), {
    612    String: "Sun Jul 01 1917 00:00:00 GMT-0230 (Newfoundland Daylight Time)",
    613    UTCString: "Sun, 01 Jul 1917 02:30:52 GMT",
    614  });
    615 }
    616 });
    617 
    618 
    619 // File: Date/Europe_London.js
    620 
    621 inTimeZone("Europe/London", () => {
    622 {
    623  // +01:00 (standard time)
    624  let local = new DateTime.Local(1970, Month.January, 1, DayOfWeek.Thursday, 0, 0, 0);
    625  let utc = new DateTime.UTC(1969, Month.December, 31, DayOfWeek.Wednesday, 23, 0, 0);
    626 
    627  assertDate(local, utc, TimeZone(+1), {
    628    String: "Thu Jan 01 1970 00:00:00 GMT+0100 (Greenwich Mean Time)",
    629    DateString: "Thu Jan 01 1970",
    630    TimeString: "00:00:00 GMT+0100 (Greenwich Mean Time)",
    631    UTCString: "Wed, 31 Dec 1969 23:00:00 GMT",
    632    ISOString: "1969-12-31T23:00:00.000Z",
    633    LocaleString: "Thu, 01/01/1970, 12:00:00 AM GMT+1",
    634    LocaleDateString: "Thu, 01/01/1970",
    635    LocaleTimeString: "12:00:00 AM GMT+1",
    636  });
    637 }
    638 });
    639 
    640 
    641 // File: Date/Europe_Moscow.js
    642 
    643 inTimeZone("Europe/Moscow", () => {
    644 {
    645  let local = new DateTime.Local(1970, Month.January, 1, DayOfWeek.Thursday, 0, 0, 0);
    646  let utc = new DateTime.UTC(1969, Month.December, 31, DayOfWeek.Wednesday, 21, 0, 0);
    647 
    648  assertDate(local, utc, TimeZone(+3), {
    649    String: "Thu Jan 01 1970 00:00:00 GMT+0300 (Moscow Standard Time)",
    650    DateString: "Thu Jan 01 1970",
    651    TimeString: "00:00:00 GMT+0300 (Moscow Standard Time)",
    652    UTCString: "Wed, 31 Dec 1969 21:00:00 GMT",
    653    ISOString: "1969-12-31T21:00:00.000Z",
    654    LocaleString: "Thu, 01/01/1970, 12:00:00 AM GMT+3",
    655    LocaleDateString: "Thu, 01/01/1970",
    656    LocaleTimeString: "12:00:00 AM GMT+3",
    657  });
    658 }
    659 
    660 // Russia was in +02:00 starting on 1991-03-31 until 1992-01-19,
    661 // while still observing DST (transitions 1991-03-31 and 1991-09-29).
    662 
    663 {
    664  // +03:00 (daylight savings)
    665  let local = new DateTime.Local(1990, Month.September, 1, DayOfWeek.Saturday, 0, 0, 0);
    666  let utc = new DateTime.UTC(1990, Month.August, 31, DayOfWeek.Friday, 20, 0, 0);
    667 
    668  assertDate(local, utc, TimeZone(+4), {
    669    String: "Sat Sep 01 1990 00:00:00 GMT+0400 (Moscow Summer Time)",
    670    DateString: "Sat Sep 01 1990",
    671    TimeString: "00:00:00 GMT+0400 (Moscow Summer Time)",
    672    UTCString: "Fri, 31 Aug 1990 20:00:00 GMT",
    673    ISOString: "1990-08-31T20:00:00.000Z",
    674    LocaleString: "Sat, 09/01/1990, 12:00:00 AM GMT+4",
    675    LocaleDateString: "Sat, 09/01/1990",
    676    LocaleTimeString: "12:00:00 AM GMT+4",
    677  });
    678 }
    679 
    680 {
    681  // +03:00 (standard time)
    682  let local = new DateTime.Local(1991, Month.March, 25, DayOfWeek.Monday, 0, 0, 0);
    683  let utc = new DateTime.UTC(1991, Month.March, 24, DayOfWeek.Sunday, 21, 0, 0);
    684 
    685  assertDate(local, utc, TimeZone(+3), {
    686    String: "Mon Mar 25 1991 00:00:00 GMT+0300 (Moscow Standard Time)",
    687    DateString: "Mon Mar 25 1991",
    688    TimeString: "00:00:00 GMT+0300 (Moscow Standard Time)",
    689    UTCString: "Sun, 24 Mar 1991 21:00:00 GMT",
    690    ISOString: "1991-03-24T21:00:00.000Z",
    691    LocaleString: "Mon, 03/25/1991, 12:00:00 AM GMT+3",
    692    LocaleDateString: "Mon, 03/25/1991",
    693    LocaleTimeString: "12:00:00 AM GMT+3",
    694  });
    695 }
    696 
    697 {
    698  // +02:00 (daylight savings)
    699  let local = new DateTime.Local(1991, Month.March, 31, DayOfWeek.Sunday, 12, 0, 0);
    700  let utc = new DateTime.UTC(1991, Month.March, 31, DayOfWeek.Sunday, 9, 0, 0);
    701 
    702  assertDate(local, utc, TimeZone(+3), {
    703    String: "Sun Mar 31 1991 12:00:00 GMT+0300 (Moscow Summer Time)",
    704    DateString: "Sun Mar 31 1991",
    705    TimeString: "12:00:00 GMT+0300 (Moscow Summer Time)",
    706    UTCString: "Sun, 31 Mar 1991 09:00:00 GMT",
    707    ISOString: "1991-03-31T09:00:00.000Z",
    708    LocaleString: "Sun, 03/31/1991, 12:00:00 PM GMT+3",
    709    LocaleDateString: "Sun, 03/31/1991",
    710    LocaleTimeString: "12:00:00 PM GMT+3",
    711  });
    712 }
    713 
    714 {
    715  // +02:00 (daylight savings)
    716  let local = new DateTime.Local(1991, Month.September, 28, DayOfWeek.Saturday, 0, 0, 0);
    717  let utc = new DateTime.UTC(1991, Month.September, 27, DayOfWeek.Friday, 21, 0, 0);
    718 
    719  assertDate(local, utc, TimeZone(+3), {
    720    String: "Sat Sep 28 1991 00:00:00 GMT+0300 (Moscow Summer Time)",
    721    DateString: "Sat Sep 28 1991",
    722    TimeString: "00:00:00 GMT+0300 (Moscow Summer Time)",
    723    UTCString: "Fri, 27 Sep 1991 21:00:00 GMT",
    724    ISOString: "1991-09-27T21:00:00.000Z",
    725    LocaleString: "Sat, 09/28/1991, 12:00:00 AM GMT+3",
    726    LocaleDateString: "Sat, 09/28/1991",
    727    LocaleTimeString: "12:00:00 AM GMT+3",
    728  });
    729 }
    730 
    731 {
    732  // +02:00 (standard time)
    733  let local = new DateTime.Local(1991, Month.September, 30, DayOfWeek.Monday, 0, 0, 0);
    734  let utc = new DateTime.UTC(1991, Month.September, 29, DayOfWeek.Sunday, 22, 0, 0);
    735 
    736  assertDate(local, utc, TimeZone(+2), {
    737    String: "Mon Sep 30 1991 00:00:00 GMT+0200 (Moscow Standard Time)",
    738    DateString: "Mon Sep 30 1991",
    739    TimeString: "00:00:00 GMT+0200 (Moscow Standard Time)",
    740    UTCString: "Sun, 29 Sep 1991 22:00:00 GMT",
    741    ISOString: "1991-09-29T22:00:00.000Z",
    742    LocaleString: "Mon, 09/30/1991, 12:00:00 AM GMT+2",
    743    LocaleDateString: "Mon, 09/30/1991",
    744    LocaleTimeString: "12:00:00 AM GMT+2",
    745  });
    746 }
    747 
    748 // Russia stopped observing DST in Oct. 2010 (last transition on 2010-10-31),
    749 // and changed timezone from +03:00 to +04:00 on 2011-03-27.
    750 
    751 {
    752  // +03:00 (daylight savings)
    753  let local = new DateTime.Local(2010, Month.October, 30, DayOfWeek.Saturday, 0, 0, 0);
    754  let utc = new DateTime.UTC(2010, Month.October, 29, DayOfWeek.Friday, 20, 0, 0);
    755 
    756  assertDate(local, utc, TimeZone(+4), {
    757    String: "Sat Oct 30 2010 00:00:00 GMT+0400 (Moscow Summer Time)",
    758    DateString: "Sat Oct 30 2010",
    759    TimeString: "00:00:00 GMT+0400 (Moscow Summer Time)",
    760    UTCString: "Fri, 29 Oct 2010 20:00:00 GMT",
    761    ISOString: "2010-10-29T20:00:00.000Z",
    762    LocaleString: "Sat, 10/30/2010, 12:00:00 AM GMT+4",
    763    LocaleDateString: "Sat, 10/30/2010",
    764    LocaleTimeString: "12:00:00 AM GMT+4",
    765  });
    766 }
    767 
    768 {
    769  // +03:00 (standard time)
    770  let local = new DateTime.Local(2010, Month.November, 1, DayOfWeek.Monday, 0, 0, 0);
    771  let utc = new DateTime.UTC(2010, Month.October, 31, DayOfWeek.Sunday, 21, 0, 0);
    772 
    773  assertDate(local, utc, TimeZone(+3), {
    774    String: "Mon Nov 01 2010 00:00:00 GMT+0300 (Moscow Standard Time)",
    775    DateString: "Mon Nov 01 2010",
    776    TimeString: "00:00:00 GMT+0300 (Moscow Standard Time)",
    777    UTCString: "Sun, 31 Oct 2010 21:00:00 GMT",
    778    ISOString: "2010-10-31T21:00:00.000Z",
    779    LocaleString: "Mon, 11/01/2010, 12:00:00 AM GMT+3",
    780    LocaleDateString: "Mon, 11/01/2010",
    781    LocaleTimeString: "12:00:00 AM GMT+3",
    782  });
    783 }
    784 
    785 {
    786  // +04:00 (standard time)
    787  let local = new DateTime.Local(2011, Month.October, 30, DayOfWeek.Sunday, 0, 0, 0);
    788  let utc = new DateTime.UTC(2011, Month.October, 29, DayOfWeek.Saturday, 20, 0, 0);
    789 
    790  assertDate(local, utc, TimeZone(+4), {
    791    String: "Sun Oct 30 2011 00:00:00 GMT+0400 (Moscow Standard Time)",
    792    DateString: "Sun Oct 30 2011",
    793    TimeString: "00:00:00 GMT+0400 (Moscow Standard Time)",
    794    UTCString: "Sat, 29 Oct 2011 20:00:00 GMT",
    795    ISOString: "2011-10-29T20:00:00.000Z",
    796    LocaleString: "Sun, 10/30/2011, 12:00:00 AM GMT+4",
    797    LocaleDateString: "Sun, 10/30/2011",
    798    LocaleTimeString: "12:00:00 AM GMT+4",
    799  });
    800 }
    801 
    802 {
    803  // +04:00 (standard time)
    804  let local = new DateTime.Local(2011, Month.November, 1, DayOfWeek.Tuesday, 0, 0, 0);
    805  let utc = new DateTime.UTC(2011, Month.October, 31, DayOfWeek.Monday, 20, 0, 0);
    806 
    807  assertDate(local, utc, TimeZone(+4), {
    808    String: "Tue Nov 01 2011 00:00:00 GMT+0400 (Moscow Standard Time)",
    809    DateString: "Tue Nov 01 2011",
    810    TimeString: "00:00:00 GMT+0400 (Moscow Standard Time)",
    811    UTCString: "Mon, 31 Oct 2011 20:00:00 GMT",
    812    ISOString: "2011-10-31T20:00:00.000Z",
    813    LocaleString: "Tue, 11/01/2011, 12:00:00 AM GMT+4",
    814    LocaleDateString: "Tue, 11/01/2011",
    815    LocaleTimeString: "12:00:00 AM GMT+4",
    816  });
    817 }
    818 
    819 // Russia changed timezone from +04:00 to +03:00 on 2014-10-26.
    820 
    821 {
    822  // +04:00 (standard time)
    823  let local = new DateTime.Local(2014, Month.October, 26, DayOfWeek.Sunday, 0, 0, 0);
    824  let utc = new DateTime.UTC(2014, Month.October, 25, DayOfWeek.Saturday, 20, 0, 0);
    825 
    826  assertDate(local, utc, TimeZone(+4), {
    827    String: "Sun Oct 26 2014 00:00:00 GMT+0400 (Moscow Standard Time)",
    828    DateString: "Sun Oct 26 2014",
    829    TimeString: "00:00:00 GMT+0400 (Moscow Standard Time)",
    830    UTCString: "Sat, 25 Oct 2014 20:00:00 GMT",
    831    ISOString: "2014-10-25T20:00:00.000Z",
    832    LocaleString: "Sun, 10/26/2014, 12:00:00 AM GMT+4",
    833    LocaleDateString: "Sun, 10/26/2014",
    834    LocaleTimeString: "12:00:00 AM GMT+4",
    835  });
    836 }
    837 
    838 {
    839  // +03:00 (standard time)
    840  let local = new DateTime.Local(2014, Month.October, 27, DayOfWeek.Monday, 0, 0, 0);
    841  let utc = new DateTime.UTC(2014, Month.October, 26, DayOfWeek.Sunday, 21, 0, 0);
    842 
    843  assertDate(local, utc, TimeZone(+3), {
    844    String: "Mon Oct 27 2014 00:00:00 GMT+0300 (Moscow Standard Time)",
    845    DateString: "Mon Oct 27 2014",
    846    TimeString: "00:00:00 GMT+0300 (Moscow Standard Time)",
    847    UTCString: "Sun, 26 Oct 2014 21:00:00 GMT",
    848    ISOString: "2014-10-26T21:00:00.000Z",
    849    LocaleString: "Mon, 10/27/2014, 12:00:00 AM GMT+3",
    850    LocaleDateString: "Mon, 10/27/2014",
    851    LocaleTimeString: "12:00:00 AM GMT+3",
    852  });
    853 }
    854 });
    855 
    856 
    857 // File: Date/Pacific_Apia.js
    858 // Pacific/Apia switched from -11:00 to +13:00 on 2011 Dec 29 24:00.
    859 
    860 inTimeZone("Pacific/Apia", () => {
    861 {
    862  // -11:00 (daylight savings)
    863  let local = new DateTime.Local(2011, Month.December, 29, DayOfWeek.Thursday, 0, 0, 0);
    864  let utc = new DateTime.UTC(2011, Month.December, 29, DayOfWeek.Thursday, 10, 0, 0);
    865 
    866  assertDate(local, utc, TimeZone(-10), {
    867    String: "Thu Dec 29 2011 00:00:00 GMT-1000 (Samoa Daylight Time)",
    868    DateString: "Thu Dec 29 2011",
    869    TimeString: "00:00:00 GMT-1000 (Samoa Daylight Time)",
    870    UTCString: "Thu, 29 Dec 2011 10:00:00 GMT",
    871    ISOString: "2011-12-29T10:00:00.000Z",
    872    LocaleString: "Thu, 12/29/2011, 12:00:00 AM GMT-10",
    873    LocaleDateString: "Thu, 12/29/2011",
    874    LocaleTimeString: "12:00:00 AM GMT-10",
    875  });
    876 }
    877 
    878 {
    879  // +13:00 (daylight savings)
    880  let local = new DateTime.Local(2011, Month.December, 31, DayOfWeek.Saturday, 0, 0, 0);
    881  let utc = new DateTime.UTC(2011, Month.December, 30, DayOfWeek.Friday, 10, 0, 0);
    882 
    883  assertDate(local, utc, TimeZone(+14), {
    884    String: "Sat Dec 31 2011 00:00:00 GMT+1400 (Samoa Daylight Time)",
    885    DateString: "Sat Dec 31 2011",
    886    TimeString: "00:00:00 GMT+1400 (Samoa Daylight Time)",
    887    UTCString: "Fri, 30 Dec 2011 10:00:00 GMT",
    888    ISOString: "2011-12-30T10:00:00.000Z",
    889    LocaleString: "Sat, 12/31/2011, 12:00:00 AM GMT+14",
    890    LocaleDateString: "Sat, 12/31/2011",
    891    LocaleTimeString: "12:00:00 AM GMT+14",
    892  });
    893 }
    894 
    895 {
    896  // +13:00 (standard time)
    897  let local = new DateTime.Local(2012, Month.April, 2, DayOfWeek.Monday, 0, 0, 0);
    898  let utc = new DateTime.UTC(2012, Month.April, 1, DayOfWeek.Sunday, 11, 0, 0);
    899 
    900  assertDate(local, utc, TimeZone(+13), {
    901    String: "Mon Apr 02 2012 00:00:00 GMT+1300 (Samoa Standard Time)",
    902    DateString: "Mon Apr 02 2012",
    903    TimeString: "00:00:00 GMT+1300 (Samoa Standard Time)",
    904    UTCString: "Sun, 01 Apr 2012 11:00:00 GMT",
    905    ISOString: "2012-04-01T11:00:00.000Z",
    906    LocaleString: "Mon, 04/02/2012, 12:00:00 AM GMT+13",
    907    LocaleDateString: "Mon, 04/02/2012",
    908    LocaleTimeString: "12:00:00 AM GMT+13",
    909  });
    910 }
    911 });
    912 
    913 
    914 // File: Date/Pacific_Chatham.js
    915 // Pacific/Chatham time zone offset is 12:45.
    916 
    917 inTimeZone("Pacific/Chatham", () => {
    918 {
    919  // +12:45 (standard time)
    920  let local = new DateTime.Local(2010, Month.August, 1, DayOfWeek.Sunday, 0, 0, 0);
    921  let utc = new DateTime.UTC(2010, Month.July, 31, DayOfWeek.Saturday, 11, 15, 0);
    922 
    923  assertDate(local, utc, TimeZone(+12,45), {
    924    String: "Sun Aug 01 2010 00:00:00 GMT+1245 (Chatham Standard Time)",
    925    DateString: "Sun Aug 01 2010",
    926    TimeString: "00:00:00 GMT+1245 (Chatham Standard Time)",
    927    UTCString: "Sat, 31 Jul 2010 11:15:00 GMT",
    928    ISOString: "2010-07-31T11:15:00.000Z",
    929    LocaleString: "Sun, 08/01/2010, 12:00:00 AM GMT+12:45",
    930    LocaleDateString: "Sun, 08/01/2010",
    931    LocaleTimeString: "12:00:00 AM GMT+12:45",
    932  });
    933 }
    934 
    935 {
    936  // +12:45 (daylight savings)
    937  let local = new DateTime.Local(2010, Month.January, 3, DayOfWeek.Sunday, 0, 0, 0);
    938  let utc = new DateTime.UTC(2010, Month.January, 2, DayOfWeek.Saturday, 10, 15, 0);
    939 
    940  assertDate(local, utc, TimeZone(+13,45), {
    941    String: "Sun Jan 03 2010 00:00:00 GMT+1345 (Chatham Daylight Time)",
    942    DateString: "Sun Jan 03 2010",
    943    TimeString: "00:00:00 GMT+1345 (Chatham Daylight Time)",
    944    UTCString: "Sat, 02 Jan 2010 10:15:00 GMT",
    945    ISOString: "2010-01-02T10:15:00.000Z",
    946    LocaleString: "Sun, 01/03/2010, 12:00:00 AM GMT+13:45",
    947    LocaleDateString: "Sun, 01/03/2010",
    948    LocaleTimeString: "12:00:00 AM GMT+13:45",
    949  });
    950 }
    951 });
    952 
    953 
    954 // File: Date/Pacific_Kiritimati.js
    955 // Pacific/Kiritimati time zone offset is +14:00.
    956 
    957 inTimeZone("Pacific/Kiritimati", () => {
    958 {
    959  // +14:00 (standard time)
    960  let local = new DateTime.Local(2010, Month.August, 1, DayOfWeek.Sunday, 0, 0, 0);
    961  let utc = new DateTime.UTC(2010, Month.July, 31, DayOfWeek.Saturday, 10, 0, 0);
    962 
    963  assertDate(local, utc, TimeZone(+14), {
    964    String: "Sun Aug 01 2010 00:00:00 GMT+1400 (Line Islands Time)",
    965    DateString: "Sun Aug 01 2010",
    966    TimeString: "00:00:00 GMT+1400 (Line Islands Time)",
    967    UTCString: "Sat, 31 Jul 2010 10:00:00 GMT",
    968    ISOString: "2010-07-31T10:00:00.000Z",
    969    LocaleString: "Sun, 08/01/2010, 12:00:00 AM GMT+14",
    970    LocaleDateString: "Sun, 08/01/2010",
    971    LocaleTimeString: "12:00:00 AM GMT+14",
    972  });
    973 }
    974 
    975 // Pacific/Kiritimati time zone offset was -10:40 until Oct. 1979.
    976 
    977 {
    978  // -10:40 (standard time)
    979  let local = new DateTime.Local(1975, Month.January, 1, DayOfWeek.Wednesday, 0, 0, 0);
    980  let utc = new DateTime.UTC(1975, Month.January, 1, DayOfWeek.Wednesday, 10, 40, 0);
    981 
    982  assertDate(local, utc, TimeZone(-10,40), {
    983    String: "Wed Jan 01 1975 00:00:00 GMT-1040 (Line Islands Time)",
    984    DateString: "Wed Jan 01 1975",
    985    TimeString: "00:00:00 GMT-1040 (Line Islands Time)",
    986    UTCString: "Wed, 01 Jan 1975 10:40:00 GMT",
    987    ISOString: "1975-01-01T10:40:00.000Z",
    988    LocaleString: "Wed, 01/01/1975, 12:00:00 AM GMT-10:40",
    989    LocaleDateString: "Wed, 01/01/1975",
    990    LocaleTimeString: "12:00:00 AM GMT-10:40",
    991  });
    992 }
    993 });
    994 
    995 
    996 // File: Date/Pacifi_Niue.js
    997 // Pacific/Niue time zone offset was -11:20 from 1952 through 1964.
    998 
    999 inTimeZone("Pacific/Niue", () => {
   1000 {
   1001  // -11:20 (standard time)
   1002  let local = new DateTime.Local(1956, Month.January, 1, DayOfWeek.Sunday, 0, 0, 0);
   1003  let utc = new DateTime.UTC(1956, Month.January, 1, DayOfWeek.Sunday, 11, 20, 0);
   1004 
   1005  assertDate(local, utc, TimeZone(-11,20), {
   1006    String: "Sun Jan 01 1956 00:00:00 GMT-1120 (Niue Time)",
   1007    DateString: "Sun Jan 01 1956",
   1008    TimeString: "00:00:00 GMT-1120 (Niue Time)",
   1009    UTCString: "Sun, 01 Jan 1956 11:20:00 GMT",
   1010    ISOString: "1956-01-01T11:20:00.000Z",
   1011    LocaleString: "Sun, 01/01/1956, 12:00:00 AM GMT-11:20",
   1012    LocaleDateString: "Sun, 01/01/1956",
   1013    LocaleTimeString: "12:00:00 AM GMT-11:20",
   1014  });
   1015 }
   1016 });
   1017 
   1018 
   1019 if (typeof reportCompare === "function")
   1020    reportCompare(true, true);