【发布时间】:2013-08-03 13:45:47
【问题描述】:
假设美国加利福尼亚州的用户选择了日期、时间和时区:
全球啤酒马拉松将于 2013 年 8 月 15 日上午 10:00,UTC-08:00
开始中欧的另一位用户打开显示此日期和时间的页面。他不想计算时间(啤酒已经很少了)。他只想看看这个日期和时间:
8/15/2013 19:00
鉴于浏览器接收到日期和时间信息,如加利福尼亚用户输入的那样:
有没有办法,在 javascript,没有外部网络服务,进行正确的转换?也就是说,要检测到 UTC-08:00 上午 10 点实际上应该是 UTC-07:00 上午 10 点,因为它是夏令时。
也许我从一开始就理解错了,但我不想让进入的用户思考他应该选择UTC-08:00(PST)还是UTC-07:00(PDT)。我假设由于 CA 的标准时区是 PST,因此人们不会在夏季转向思考 PDT。还是他们?!
在中欧,标准日期为 UTC+01:00,夏令时日期为 UTC+02:00。因此,CA 和欧洲之间的差异应该是 9 小时,一年中的两个时段除外,当一个或另一个区域在标准模式和夏令时模式之间切换时。
更新:
经过更多思考和阅读 cmets,我最需要的是:
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 plugin 似乎能够做到这一点(或多或少)。
任何其他方式,使用浏览器 API?
【问题讨论】:
-
检查
Moment.js和Moment Timezonemomentjs.com/timezone -
我已经使用了 moment.js。时区扩展看起来很有希望。生成的时区文件包含夏令时转换数据。经过快速测试,它能够正确调整输入的时间。所以这看起来浏览器无法告诉“嘿,对于这个日期,你必须使用这个 UTC 偏移量,因为在那个日期,有夏令时”?
标签: javascript date datetime timezone timezone-offset