繁体   English   中英

如何将非本地 javascript 日期时区转换为 UTC?

[英]How to convert a non local javascript date timezone to UTC?

如何将日期从特定时区转换为 UTC?

在 javascript 中,您可以将本地日期转换为 utc 并从日期字符串或 utc 字符串创建日期。 intl 内置函数允许您将日期时间转换为时区,但不能转换回 UTC。 令人惊讶的是,所有其他人都说当地时间,我找不到任何具体问题。

我知道您可以立即从时区转换 UTC,如下所示:

 var now = moment(); console.log(now.format('YYYY-MM-DD HH:mm:ss')) console.log(now.utc().format('YYYY-MM-DD HH:mm:ss')) console.log(now.tz("Australia/Sydney").format('YYYY-MM-DD HH:mm:ss')) console.log(now.tz("Australia/Sydney").utc().format('YYYY-MM-DD HH:mm:ss')) console.log(now.tz("Australia/Sydney").tz("Asia/Tokyo").format('YYYY-MM-DD HH:mm:ss')) console.log(now.tz("Australia/Sydney").tz("Asia/Tokyo").utc().format('YYYY-MM-DD HH:mm:ss'))
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.25/moment-timezone-with-data.min.js"></script>

UTC 应该匹配。 除了使用 moment 之外,考虑到日期位于使用 js 到 utc 的浏览器中非本地时区,还有哪些其他方式(浏览器、节点、库)可以转换日期? 不需要是香草js。

这是我使用 Intl.DateTimeFormat() 的 javascript 原生 vanillajs 解决方案

基本上我得到了指定时区和本地时间的差异。 我添加该差异然后设置返回UTC。

 /** * take a date of assumed timezone and convert to utc * * @param {*} d * @param {*} tz * @returns */ function tzUTC(d, tz) { // first calculate tz difference // use passed in date to get timezone difference as close to that day. var date = new Date(d); var options = { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: false, timeZone: tz }; var tzDate = new Intl.DateTimeFormat('en-US', options).format(date) var diff = date - new Date(tzDate); var minutes = Math.floor((diff / 1000) / 60); var localTime = new Date(d); localTime.setMinutes(d.getMinutes() + minutes); return localTime.toUTCString(); } var d = new Date("5/18/2019, 07:49:13"); // Fri May 17 2019 17:49:13 GMT-0400 (Eastern Daylight Time) // utc should be Fri, 17 May 2019 21:49:13 GMT" // console.log("d:" + d) console.log("tzUTC:" + tzUTC(d, 'Australia/Sydney')) d = new Date("5/17/2019, 14:53:21"); console.log("d:" + d) // Fri May 17 2019 17:53:21 GMT-0400 (Eastern Daylight Time) // utc "Fri, 17 May 2019 21:53:21 GMT" console.log("tzUTC:" + tzUTC(d, 'America/Los_Angeles'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM