假设您网站的用户输入了一个日期范围。
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 时间匹配(请参见注释)。但是,在实践中,它确实可以胜任。