使用时区信息将Javascript日期转换为UTC

时间:2017-06-01 09:07:19

标签: javascript date timezone momentjs utc

我有一个允许用户创建活动的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)'

我希望它返回当地日期和时间2017年1月1日星期日中午12:00:00 GMT + 0000(GMT)'。

2 个答案:

答案 0 :(得分:1)

来自docs

  

如果你想要一个实际的时区 - 特定地点的时间,比如   CurrentDate.setDate(CurrentDate.getDate()-14);,请考虑moment-timezone

这表明该功能不是内置于Moment.js本身,但另一个库应该完成它:

America/Los_Angeles

请注意,您仍应将指定的时区存储在另一列中,因为无法从存储在MySQL中的日期中删除它。

答案 1 :(得分:0)

我最后做了以下事情:

const momentTimezone = require( 'moment-timezone' );
const DateWithOffset = require( 'date-with-offset' );

module.exports = function( date, timezone ) {

    const offset = momentTimezone.tz.zone( timezone ).offset( date );

    const newDate = new DateWithOffset( date.toUTCString(), ( 0 - offset ) );

    return newDate.toISOString();

};

可能有更好的方法可以做到这一点,但这似乎有效。我使用了npm模块date-with-offset来完成所需的工作。