【发布时间】:2017-11-02 08:14:48
【问题描述】:
我有一个允许用户创建事件的 UI。当用户创建此事件时,他们选择一个日期(和时间)并分别为事件位置选择一个时区(例如“America/New_York”)。
我需要使用日期(包括时间)和选定的时区(字符串)来创建 UTC 日期。我不知道该怎么做。
我曾考虑过使用 getTimezoneOffset,但这不会根据一年中的时间(英国夏令时等)而改变。
更新。我的解释不是很清楚,所以这里有更多细节:
用户选择事件的日期和时间是“2017 年 1 月 1 日 07:00:00”。 然后他们选择“America/New_York”的时区。它发生在纽约早上 7 点,但我在英国。
当我这样做时:
const formatDate = moment.tz( new Date('Jan 01 2017 07:00:00'), 'America/New_York' ).format(); //returns '2017-01-01T02:00:00-05:00'
如果我将纽约的这个日期转换为我的本地日期:
new Date( formatDate ); // returns 'Sun Jan 01 2017 07:00:00 GMT+0000 (GMT)'
我希望它返回本地日期和时间“Sun Jan 01 2017 12:00:00 GMT+0000 (GMT)”。
【问题讨论】:
-
处理时区的唯一合理方法是地理标识符,例如“America/New_York”。
-
你的意思是
new Date().toISOString()? - 这将永远是 UTC -
没有“utcOffset”方法。 getTimezoneOffset 以分钟为单位返回主机偏移量,+ 表示西,- 表示东(与 ISO 8601 相反)。
-
日期对象在内部是 UTC。它用于计算 UTC 时间值并使用非 UTC 方法生成“本地”值的主机偏移量。如果你想在任何时区得到一个相等的时间,把UTC时间调整到需要的量,然后使用UTC方法生成一个字符串,见Calculating a date and time in another time zone。
-
如果可以添加新库,您可以考虑使用moment.js。然后你只需使用 moment.utc(date).format() 将 JavaScript 的 Date 作为日期传递
标签: javascript date timezone momentjs utc