首页 > 解决方案 > 在香草javascript中使用UTC而不是本地时区获取日期对象

问题描述

我正在将日期时间上传到动态表单上的字段,并且表单需要接收 UTC 日期时间。如果我做这样的事情:

new Date(new Date().toISOString()) 

如果我 console.log 它显示为的日期:Fri Dec 18 2020 14:27:39 GMT-0500 (Eastern Standard Time)

我希望将对象打印为 UTC 时间,并将 UTC 指定为时区,否则表单(期望日期对象)会继续作为 EST 时间上传。

标签: javascriptdatedatetimewebdynamics-crm

解决方案


日期对象只是 ECMAScript 纪元 1970-01-01T00:00:00Z 的毫秒偏移量。他们没有时区。当您对对象进行字符串化时,您会得到一个时间戳,该时间戳取决于所使用的方法。

大多数方法(例如toString)使用时区和偏移量的主机设置,并根据这些设置生成时间戳。

如果您想要一个符合 ISO 8601 且偏移量为零的字符串,请根据您想要的格式使用toISOStringtoUTCString :

let d = new Date();
console.log(`local time : ${d.toString()}`);
console.log(`toISOString: ${d.toISOString()}`);
console.log(`toUTCString: ${d.toUTCString()}`);

请参阅如何格式化 JavaScript 日期

在您的代码中,表达式:

new Date(new Date().toISOString()) 

首先为当前时刻创建一个 Date 对象,然后根据toISOString方法生成一个时间戳。然后将其解析回 Date 对象,因此结果与以下内容相同:

new Date();

推荐阅读