假设用户在美国加利福尼亚州选择一个日期、时间和时区:
全球啤酒马拉松从2013年8月15日上午10:00,UTC-08:00开始。
另一个用户在中欧打开了显示此日期和时间的页面。他不想进行时间计算(已经喝了几杯啤酒)。他只想看到这个日期和时间:
2013年8月15日下午7:00
假设浏览器接收到了由加利福尼亚用户输入的日期和时间信息:
有没有一种方法,在Javascript中,不使用外部网络服务,进行正确的转换?也就是说,要检测UTC-08:00的上午10点实际上应该是UTC-07:00,因为这是夏令时。
也许我从一开始就误解了这个问题,但我不想让输入的用户去考虑是否应该选择UTC-08:00(太平洋标准时间)还是UTC-07:00(太平洋夏令时)。我认为,由于加利福尼亚的标准时区是太平洋标准时间,人们在夏季不会转而思考太平洋夏令时。或者他们会吗?!
在中欧,标准日期是UTC+01:00,夏令时日期是UTC+02:00。因此,加州和欧洲之间的时间差应该为9个小时,除了一年中两个时期,当一个地区切换到标准或夏令时模式时,这个时间差会发生变化。
更新:
经过更多思考和阅读评论后,我理想情况下需要的是这样的:
var utcOffset = f('2013-08-15T10:00', 'America/Los_Angeles');
// utcOffset == "-07:00"
var utcOffset = f('2013-11-15T10:00', 'America/Los_Angeles');
// utcOffset == "-08:00"
到目前为止,Guido Preite建议使用的moment.js/timezone插件似乎能够(或多或少地)做到这一点。
还有其他方法吗?可以使用浏览器API吗?
Moment.js
和Moment Timezone
,网址为http://momentjs.com/timezone/。 - Guido Preite