javascript - 如何根据时区将时刻转换为另一个时刻

标签 javascript timezone momentjs

我的 JS 真的很糟糕,我正在为 moment.js 而苦苦挣扎

我的愿望是:从 div (UTC) 获取日期并根据用户的时区转换此日期。

所以如果 UTC 日期是 30/03/2017 6:34:22 AM 纽约有人看到 30/03/2017 2:34:22 AM 珀斯有人看到 30/03/2017 2:34:22 PM

我在 C# 中使用 TimeZoneInfo 和 IsDaylightSavingTime 做了类似的事情,但我不知道如何在 JS 中做到这一点。

在我的代码下面:

// <div id="utc-time">30/03/2017 6:34:22 AM</div>

var dt = document.getElementById("utc-time").innerHTML;  
var m = moment(dt, "DD-MM-YYYY hh:mm:ss a");
var tz = moment.tz.guess();
var user = moment.tz(dt, "DD-MM-YYYY hh:mm:ss a", tz);
var mString = m.toString();

// Console.log
// -----------
dt = 30/03/2017 6:34:22 AM
m = 1490826862000
user = Thu Mar 30 2017 06:34:22 GMT+0800
mString = Wed Mar 29 2017 22:34:22 GMT+0000

看起来创建的时刻不是 UTC,而是保持本地时区。一个提示会很好 :)

最佳答案

您可以使用 moment local()将 moment 对象转换为用户本地时间,同时您可以使用 tz()在区域之间转换时间。

使用moment.utc将日期解析为 UTC。使用 format()显示矩对象的值。

如果您只需要支持 UTC 和用户本地时间,则不需要 moment-timezone。

这里是一个工作示例:

var dt = document.getElementById("utc-time").innerHTML;  
var m = moment.utc(dt, "DD-MM-YYYY h:mm:ss A"); // parse input as UTC
console.log(m.clone().local().format("DD-MM-YYYY h:mm:ss A")); // local time
var tz = 'America/New_York'; // example value, you can use moment.tz.guess()
console.log(m.clone().tz(tz).format("DD-MM-YYYY h:mm:ss A")); // 30-03-2017 2:34:22 AM
tz = 'Australia/Perth';
console.log(m.clone().tz(tz).format("DD-MM-YYYY h:mm:ss A")); // 30-03-2017 2:34:22 PM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.7/moment-timezone-with-data-2010-2020.min.js"></script>

<div id="utc-time">30/03/2017 6:34:22 AM</div>

关于javascript - 如何根据时区将时刻转换为另一个时刻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43113350/

相关文章:

javascript - setAttribute() 不工作

asp.net - 哪个 Javascript 历史回溯实现是最好的?

javascript - 检查网站是否为图像的函数

Javascript - 使用字符串构造对象属性

parsing - 如何正确解析时区代码

timezone - 如何配置 Fluentd 的时区?

javascript - 使用 moment.js 更新提供的时间

php - DateTime 使用不正确的时区

javascript - 时区转换时刻js

java - jackson 在 momentJS 中使用的奇怪时间戳值给出了错误的年份