在JS中获取指定时区的当前日期时间

4

我正在处理一个平台,该平台有来自世界各地的用户,但某些设置绑定了预定义的时区日期时间。

这是什么意思?如果用户从不同的时区连接,应用程序仍应显示他在预定义时区的当前时间,无论他从哪里登录。我需要在客户端使用JavaScript计算这个值,只使用时区字符串。

我想要做的是像这样:

new TimezoneDate('timezone');

结果应该是该时区的当前日期时间。

我知道有一些处理这个问题的JS库,但我想知道是否有一个不使用外部库的简单JS解决方案?

2个回答

2
根据您对“简单”的定义,但实际上不是。JavaScript默认不支持时区。强烈推荐使用Moment Timezonehttp://momentjs.com/timezone/,因为它非常易于使用。我也在进行一个有同样要求的项目中,这个库让我的工作变得更加容易。
编辑: 有了这个库,您想要做的事情就像这样简单:
var timezonedDate = moment.tz('YOUR TZ STRING').toDate();

他说他不想使用任何外部库。 - Sotiris Kiritsis
如果有其他人偶然发现这里,想要完成这个任务是非常困难的,因为本地支持这样的操作非常少,所以momentjs是一个不错的npm包。 - Munib

1
你可以尝试:

var offset = new Date().getTimezoneOffset();

或者获取小时差:

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Mozilla 参考文档

时区偏移量是 UTC 和本地时间之间的分钟差异。请注意,这意味着如果本地时区落后于 UTC,则偏移量为正数,如果本地时区领先于 UTC,则偏移量为负数。例如,如果您所在的时区是 UTC+10(澳大利亚东部标准时间),将返回 -600。夏令时会防止该值成为给定区域的常量。


该解决方案不符合从给定时区字符串获取当前日期时间的要求。 - GPicazo
@GPicazo 我认为这可以帮助他。他只需将偏移量加减到他的时间上,并向任何用户显示相同的时间。 - Sotiris Kiritsis
是的,你是对的,我并不是意味着它没有帮助,只是它没有直接回答问题,但你说得对,它还是很有用的。我认为这主要取决于他是否仅需要获取当前日期时间作为时区特定的需求,或者他是否需要执行其他与时区相关的操作(日期计算等)。 - GPicazo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接