Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在moment.js中将时间从utc更改为所选时区?_Javascript_Datetime_Timezone_Momentjs_Moment Timezone - Fatal编程技术网

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吗?我不能复制这个。