首页 > 解决方案 > 如何在 javascript 中强制 Date.parse() 转换为本地时间和日期而不是 UTC

问题描述

我有一个应用程序,我在其中调用函数 Date.parse,如下所示:

Date.parse('2021-02-22' + ' ' + '13:00')

但是,当我在本地和生产环境 (AWS) 中运行应用程序时,此函数似乎返回两个不同的结果。在本地返回 1613959200000,而在生产中返回 1613998800000。经过进一步调查,1613959200000 似乎在澳大利亚东部夏令时间 13:00 转换为 2021-02-22,而 1613998800000 在 UTC 时间 13:00 转换为 2021-02-22时间。有没有办法可以强制 Date.parse() 转换为客户端/浏览器的本地时区,而不是 UTC?(在这种情况下,澳大利亚东部夏令时间,但我希望它适用于所有时区)。

编辑:我尝试使用日期对象,以生成与本地时区同步的日期/时间对象,但它似乎不起作用,如下面的代码所示:

var d = new Date("Mon Feb 22 2021 00:00:00 GMT+1100 (Australian Eastern Daylight Time)");

var ds = d.toString();

var e = new Date(2021,2,22,0,0)
var es = e.toString();

console.log(ds === es) //returns false for some reason

标签: javascriptdatedatetime

解决方案


根据 ECMAScript 规范,您只需使用 aT而不是空格来分隔日期和时间部分。

const t = Date.parse('2021-02-22' + 'T' + '13:00');
console.log(t); // result will differ depending on local time zone

该格式在日期时间字符串格式下进行了完整描述。此外,在它的文档中Date.parse指出:

...当 sss 元素不存在时,使用“000”。当 UTC 偏移表示不存在时,仅日期形式被解释为 UTC 时间,而日期时间形式被解释为本地时间。

因此,组合字符串2021-02-22T13:00将被解释为2021-02-22T13:00:00.000本地时区,因为它是日期时间形式。


推荐阅读