假设我的约会日期为:
"2000-01-01T01:00:00Z"
它是UTC时区。我想将时间移到Europe/Copenhagen
时区,使其变成"2000-01-01T02:00:00"
。
我想用moment-timezone
来做。但是,问题在于它始终使用我的本地时区(不是Europe/Copenhagen
)。我尝试了多种方式,例如:
const date = '2000-01-01T01:00:00Z';
return moment(date).tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');
但是参考点仍然是我的本地时区。我根本不希望它使用我的本地时区。如何实现?
答案 0 :(得分:1)
我尝试了两种选择。
时区在日期末尾用“ Z”表示
第一个喜欢你的人
moment('2000-01-01T01:00:00Z').tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');
第二个比较棘手:
moment.tz('2000-01-01T01:00:00Z', 'UTC').tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');
我得到:
2000-01-01T02:00:00
有两个选项。您使用的即时通讯的版本是什么?
答案 1 :(得分:1)
在您对问题的评论中:
我在Quatar时区。上面的代码为我返回了“ 2000-01-01T04:00:00” ...
这只会在以下情况之一下发生:
无论位置如何,您实际上是从UTC转换为卡塔尔的时区:
moment("2000-01-01T01:00:00Z").tz('Asia/Qatar').format('YYYY-MM-DDTHH:mm:ss')
//=> "2000-01-01T04:00:00"
您在卡塔尔,只是在转换为当地时间:
moment("2000-01-01T01:00:00Z").format('YYYY-MM-DDTHH:mm:ss')
//=> "2000-01-01T04:00:00"
您已经加载了针对时刻和时区的脚本,但是尚未加载任何时区数据。在这种情况下,您将在调试控制台中收到一条错误消息,指出Moment Timezone has no data for <zone name> ...
在这种情况下,无法进行时区转换,因此其行为与上述条件中的代码相同。
请使用包含时区数据的文件之一,例如moment.timzone.js
,而不是加载moment-timezone-with-data-10-year-range.js
。参见these docs。
我怀疑这是最后一个。