我在webapp 这里中看到了处理时间的出色总结。但是,它并没有清楚地解决以下情况。我想要一种基于UTC + Location(iana时区位置- America/New_York)的日期时间来获取web应用程序中的本地时间的方法。
我在找一个做以下计算的图书馆。如果它在Javascript中本机工作,那也符合我的目的。
从服务器中检索以下信息
{
dateTime: "2002-10-27T15:04:05Z" # Time in UTC, no TimeZone info
userTimeZone: "America/New_York" # based on current user location
}问题是,考虑到夏时制的抵消,我找不到办法把它转换成地点(纽约)的时间。
我不确定在数据库中保存时区偏移量可以解决这个问题,因为我的用户可能来自跨区域,并且可能查看相同的数据。例如,事件发生在一个属于Estern区域(EST/EDT)的位置,但太平洋地区的用户可以根据其位置(上午8时至下午5时“America/洛杉矶”- PST/PDT)查询数据。
我看了Moment.js,但没有找到解决方案。
总结说,我需要一种方法来获取web浏览器中特定位置的本地时间(考虑到夏时制的抵消),从UTC + IANA位置的日期时间输入。
发布于 2013-01-23 16:41:20
原始答案
MomentJS是一个优秀的库,但它专注于解析。您需要TimezoneJS,它在javascript中实现Olson数据库。
您的用例是文档中首先描述的案例之一。
最新答案
在JavaScript,如下所示中有多个用于进行时区转换的库。在最初提出这个问题时,我只知道TimezoneJS。
既然您询问了moment.js,就应该使用力矩时区插件。(当你最初问这个问题时,这是不可用的。)
var x = // your object as written in the question
var m = moment(x.dateTime).tz(x.userTimeZone);
var s = m.format(); // or whatever you want to do发布于 2018-01-18 11:21:47
您可以在不使用toLocaleDateString方法的库中实现这一点:
// prints 'Sun, Oct 27, 2002, 10:04 AM EST'
new Date('2002-10-27T15:04:05Z')
.toLocaleDateString('en-US', {
timeZone:'America/New_York',
timeZoneName: 'short',
minute: 'numeric',
hour: 'numeric',
weekday: 'short',
day: 'numeric',
year: 'numeric',
month: 'short',
});Intl.DateTimeFormat以非常相似的方式工作。
在Chrome,Firefox和Safari (OSX)上测试。请注意,根据MDN,时区属性只需要支持'UTC‘,完整的IANA数据库可能不会在所有浏览器中实现。请随时更新此答案,并支持其他设置。
发布于 2014-09-03 01:26:09
MomentJS的优秀人士创建了另一个名为Timezone的库。我认为这正是你要找的。具体地说:
var zone = moment.tz.zone('America/New_York');
zone.parse(Date.UTC(2012, 2, 19, 8, 30)); // 240https://stackoverflow.com/questions/14484660
复制相似问题