我的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,而是保持本地时区。一个提示会更好:)
发布于 2017-03-30 17:18:49
您可以使用moment local()将moment对象转换为用户本地时间,也可以使用tz()在不同区域之间转换时间。
使用moment.utc将日期解析为UTC。使用format()显示moment对象的值。
如果你只需要支持UTC和用户本地时间,你不需要时刻-时区。
下面是一个工作示例:
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>
发布于 2020-10-22 03:15:29
如果您想在moment js中将日期转换为另一个时区,请使用utcOffset并提供偏移量,如下所示
moment(new Date()).utc().utcOffset("+05:30").format("YYYY-MM-DD HH:mm:ss");https://stackoverflow.com/questions/43113350
复制相似问题