Javascript 如何在moment.js中将时间从utc更改为所选时区?
比如说我有一个像这样的约会:Javascript 如何在moment.js中将时间从utc更改为所选时区?,javascript,datetime,timezone,momentjs,moment-timezone,Javascript,Datetime,Timezone,Momentjs,Moment Timezone,比如说我有一个像这样的约会: "2000-01-01T01:00:00Z" 它位于UTC时区。我想把时间移到欧洲/哥本哈根时区,这样它将是“2000-01-01T02:00:00” 我想用时刻时区来做这件事。但是问题是它总是使用我的本地时区(不是欧洲/哥本哈根)。我尝试了多种方法,例如: const date = '2000-01-01T01:00:00Z'; return moment(date).tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:m
"2000-01-01T01:00:00Z"
它位于UTC时区。我想把时间移到欧洲/哥本哈根
时区,这样它将是“2000-01-01T02:00:00”
我想用时刻时区
来做这件事。但是问题是它总是使用我的本地时区(不是欧洲/哥本哈根
)。我尝试了多种方法,例如:
const date = '2000-01-01T01:00:00Z';
return moment(date).tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');
但参考点仍然是我当地的时区。我根本不想让它使用我当地的时区。如何实现它?我尝试了两种选择
时区由日期末尾的“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
有两种选择。你使用的是什么版本的moment?我尝试了两种选择
时区由日期末尾的“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
有两种选择。您使用的是什么版本的moment?根据您在问题中的评论: 我在四分之一时区。上面的代码为我返回'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.timzone.js
。看moment-timezone-with-data-10-year-range.js
我怀疑这是最后一个问题。从你在问题中的评论来看: 我在四分之一时区。上面的代码为我返回'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.timzone.js
。看moment-timezone-with-data-10-year-range.js
我想这是最后一次了。你能澄清一下“参考点是我的本地时区”是什么意思吗?上面的代码返回我期望的字符串,如果将“Europe/Copenhagen”更改为“America/Los_Angeles”,它将返回我期望的“1999-12-31T17:00:00”。我不确定你在这里期望的是什么,而不是你实际看到的是什么。@JonSkeet我在四分之一时区。上述代码为我返回“2000-01-01T04:00:00”(考虑到我的本地浏览器时区)。它应该返回'2000-01-01T02:00:00'(哥本哈根时间)。好的,所以我怀疑是
时刻(日期)
部分没有考虑Z。你能澄清一下“参考点是我的本地时区”是什么意思吗?上面的代码返回我期望的字符串,如果将“Europe/Copenhagen”更改为“America/Los_Angeles”,它将返回我期望的“1999-12-31T17:00:00”。我不确定你在这里期望的是什么,而不是你实际看到的是什么。@JonSkeet我在四分之一时区。上述代码为我返回“2000-01-01T04:00:00”(考虑到我的本地浏览器时区)。它应该返回'2000-01-01T02:00:00'(哥本哈根时间)。好的,所以我怀疑是时刻(日期)
部分没有考虑Z。“时刻时区”:“^0.5.5”特别是“0.5.25”你能把你的解决方案放到plunker/jsfiddle中吗?我无法复制此内容。“时刻时区”:“^0.5.5”特别是“0.5.25”您能将您的解决方案放入plunker/jsfiddle吗?我不能复制这个。