簡體   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