【发布时间】:2018-09-21 03:11:26
【问题描述】:
我正在尝试使用 javascript Date 的 toLocaleString 函数将日期格式化为“MM/dd/yyyy”(短日期格式)。但是当我更改时区时,它没有给出预期的结果。 Bellow 是我的代码的 sn-p
var d1 = new Date(1954, 0, 1); // Fri Jan 01 1954 00:00:00 GMT-0900 (AKST)
var options = {
year: 'numeric',
month: '2-digit',
day: '2-digit'
};
var shortDate = d1.toLocaleString('en-US', options);
console.log(shortDate);
上面的代码打印12/31/1953,而不是预期的结果01/01/1954。
观察/步骤:
- 将本地机器的时区更改为
Whitehorse - Canada(Pacific DayLight Time)。 - 运行上述代码 sn-p 以复制结果。
- 它只会在
year值小于1968的情况下被复制(对于大于1968的年份可以正常工作)
供参考,上传录音(http://recordit.co/cdWMgWFLKJ)
【问题讨论】:
-
请详细说明“当我更改时区时”的确切含义。照原样,您提供的代码根本没有进行时区转换,并且无论计算机的时区设置如何,都会始终提供
01/01/1954。 -
正是,这就是我的期望(不使用时区应该总是返回相同的结果),但没有发生。如果我在本地机器上保留默认时区(
GMT+0530 (IST)),它会返回我01/01/1954,而如果我将其更改为美国时区附近的某个位置(例如GMT-0900 (AKST)),它会给我12/31/1953。我正在使用 crome 控制台来测试这个场景。 -
我想也许您正在构建
d1与您在此处显示的不同? -
我已经添加了相同的小录音请检查link
-
感谢录制。我相信您已经发现了一个错误,可能与 Mac 上的 Chrome 在操作系统时区更改时如何重新加载其时区数据有关。如果您使用新时区完全关闭并重新启动 Chrome,它是否会给出相同的结果会很有趣。我猜不是。无论哪种方式,您都应该根据此处的指南提交错误报告:chromium.org/for-testers/bug-reporting-guidelines。另请注意,我无法在 Windows 上重现此内容。
标签: javascript date time timezone date-formatting