例如,东部和中部的区别是1.我的解决方案感觉很糟糕。有更简单/更好的方法吗?
var diff = (parseInt(moment().tz("America/New_York").format("ZZ")) - parseInt(moment().tz("America/Chicago").format("ZZ"))) / 100;
我的示例是使用Momentjs库。
答案 0 :(得分:14)
无法计算两个任意时区之间的 差异。您只能计算特定时刻的差异。
两个时区之间的一般情况都是如此。但是某些时区要么同时完全切换,要么根本不切换。
请记住,在美国,每个使用DST的时区实际上都会在不同的时刻切换。它们都在凌晨2点在本地时间切换,但不会在同一时间通用时刻切换。
另请参阅the timezone tag wiki中的“时区!=偏移”。
现在关于时刻时区,你在评论中说:
网络服务器位于东部时区;我们在中环。我需要用户时区和服务器的区别。
Web服务器的时区无关紧要。您应该能够在世界任何地方托管而不会影响您的应用程序。如果你做不到,那你做错了。
您 可以 时区(美国中部时间)和用户之间的当前时差。如果代码在浏览器中运行,您甚至不需要知道用户的确切时区:
var now = moment();
var localOffset = now.utcOffset();
now.tz("America/Chicago"); // your time zone, not necessarily the server's
var centralOffset = now.utcOffset();
var diffInMinutes = localOffset - centralOffset;
如果代码在服务器上运行(在node.js应用程序中),那么将需要知道用户的时区。只需更改第一行:
var now = moment.tz("America/New_York"); // their time zone
答案 1 :(得分:0)
由于诸如夏令时(dst)之类的东西,两个时区之间的时差只能在特定时间测量。
但是,对于特定日期,下面的代码应该可以工作。
function getOffsetBetweenTimezonesForDate(date, timezone1, timezone2) {
const timezone1Date = convertDateToAnotherTimeZone(date, timezone1);
const timezone2Date = convertDateToAnotherTimeZone(date, timezone2);
return timezone1Date.getTime() - timezone2Date.getTime();
}
function convertDateToAnotherTimeZone(date, timezone) {
const dateString = date.toLocaleString('en-US', {
timeZone: timezone
});
return new Date(dateString);
}
偏移量/差异以毫秒为单位
然后您要做的就是:
const offset = getOffsetBetweenTimezonesForDate(date, 'America/New_York', 'America/Chicago');