48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
|
// Copyright 2022 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
// Test the new Date( date.toLocaleString("en-US")) is not invalid.
|
||
|
// This is not guaranteed by the standard but many code use that to set the
|
||
|
// timezone as suggested in
|
||
|
// https://stackoverflow.com/questions/15141762/how-to-initialize-a-javascript-date-to-a-particular-time-zone
|
||
|
|
||
|
let d = new Date();
|
||
|
|
||
|
// https://tc39.es/ecma262/#sec-todatestring
|
||
|
// 21.4.4.41.4 ToDateString ( tv )
|
||
|
// 1. If tv is NaN, return "Invalid Date".
|
||
|
let invalid = "Invalid Date";
|
||
|
let largestDiff = 25*60*60*1000;
|
||
|
|
||
|
let garbage = new Date("garbage");
|
||
|
assertTrue(invalid == garbage);
|
||
|
assertEquals(NaN, garbage.getTime());
|
||
|
|
||
|
let d1 = new Date(d.toLocaleString("en-US"));
|
||
|
assertTrue(d1 != invalid);
|
||
|
assertTrue(d1.getTime() != NaN);
|
||
|
// The milliseconds are different between d1 and d.
|
||
|
assertTrue(Math.abs(d1-d) < 1000);
|
||
|
|
||
|
// Force a version of date string which have U+202f before AM
|
||
|
let nnbsp_am = new Date("11/16/2022, 9:04:55\u202fAM");
|
||
|
assertTrue(nnbsp_am != invalid);
|
||
|
assertTrue(nnbsp_am.getTime() != NaN);
|
||
|
// Force a version of date string which have U+202f before PM
|
||
|
let nnbsp_pm = new Date("11/16/2022, 9:04:55\u202fPM");
|
||
|
assertTrue(nnbsp_pm != invalid);
|
||
|
assertTrue(nnbsp_pm.getTime() != NaN);
|
||
|
|
||
|
let d2 = new Date(d.toLocaleString("en-US", {timeZone: "Asia/Taipei"}));
|
||
|
assertTrue(d2 != invalid);
|
||
|
assertTrue(d2.getTime() != NaN);
|
||
|
// The differences should be within 25 hours.
|
||
|
assertTrue(Math.abs(d2-d) < largestDiff);
|
||
|
|
||
|
let d3 = new Date(d.toLocaleString("en-US", {timeZone: "Africa/Lusaka"}));
|
||
|
assertTrue(d3 != invalid);
|
||
|
assertTrue(d3.getTime() != NaN);
|
||
|
// The differences should be within 25 hours.
|
||
|
assertTrue(Math.abs(d3-d) < largestDiff);
|