协慌网

登录 贡献 社区

如何将 JavaScript 日期转换为 UTC?

假设您网站的用户输入了一个日期范围。

2009-1-1 to 2009-1-3

您需要将此日期发送到服务器进行某些处理,但是服务器希望所有日期和时间都采用 UTC。

现在,假设用户位于阿拉斯加,夏威夷或斐济。由于它们所处的时区与 UTC 截然不同,因此需要将日期范围转换为以下形式:

2009-1-1T8:00:00 to 2009-1-4T7:59:59

使用 JavaScript Date 对象,您如何将第一个 “本地化” 日期范围转换为服务器可以理解的范围?

答案

简单而愚蠢

var date = new Date(); 
var now_utc =  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
 date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

 return new Date(now_utc);

toISOString()方法返回简化的扩展 ISO 格式( ISO 8601 )的字符串,该字符串始终为 24 或 27 个字符( YYYY-MM-DDTHH:mm:ss.sssZ±YYYYYY-MM-DDTHH:mm:ss.sssZ )。时区始终为零 UTC 偏移,如后缀 “ Z ” 所示。

资料来源: MDN 网站文件

您需要的格式是使用.toISOString()方法创建的。对于旧的浏览器(IE8 及以下),其本身不支持此方法,垫片可以发现这里

这将使您能够执行所需的操作:

var isoDateString = new Date().toISOString();
console.log(isoDateString);

对于时区工作, moment.js 和 moment.js 时区确实是非常宝贵的工具…… 尤其是用于在客户端和服务器 javascript 之间导航时区。

这是我的方法:

var now = new Date();
var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);

生成的utc对象实际上不是 UTC 日期,而是将本地日期更改为与 UTC 时间匹配(请参见注释)。但是,在实践中,它确实可以胜任。