我有一个允许用户创建活动的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)'。
答案 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来完成所需的工作。