如何转换GMT / UTC到当地时间并使用momentjs返回?

时间:2018-04-27 21:04:50

标签: javascript momentjs

我有以下字符串:

“2018年12月25日01:02:20”

我打算将其作为GMT / UTC使用moment.js,如何将其转换为本地时间并返回UTC?

当我这样做时:

moment(myDateString).local()

然后稍后尝试转换回来:

moment(myDateStrig).utc()

它们都会产生不同的结果。我如何制作它以便我可以将我的时间从UTC转换为本地,然后再转换回UTC?

注意: 当我在字符串.utc()上尝试"December 25, 2018 01:02:20"函数时,我会得到不同的时间。当我在utc转换时刻.local()时,我会得到一个不同于"December 25, 2018 01:02:20"原始日期的不同日期。

请展示一个例子,如果你能看到我有3个不同的日期。

2 个答案:

答案 0 :(得分:0)

为了解释字符串,例如&#34; 2018年12月25日01:02:20&#34;它上面没有时区,您可以在其上调用moment(),将其解释为本地时间,或者您可以在其上调用moment.utc(),这会将其解释为UTC时间。< / p>

试试这个:

const myUtcMoment = moment.utc(myDateString)

这将导致Moment对象代表2018年12月25日上午01:02:20在UTC时区。

要将Moment转换为当地时间,您可以执行以下操作:

const myLocalMoment = myUtcMoment.local()

要将其转换回来,您可以拨打myLocalMoment.utc()

顺便说一下,使用这种日期格式,这是否是24小时的时间并不是很清楚。 Moment.js文档recommend specifying a format是为了减轻歧义。

答案 1 :(得分:0)

由于您的输入代表UTC时间,您必须使用moment.utc(根据评论中其他人的建议):

  

默认情况下,时刻会以当地时间进行分析和显示。

     

如果您想以UTC格式解析或显示片刻,可以使用moment.utc()代替moment()

此外,由于您的输入字符串不是moment(String)(ISO 8601或RFC 2822)识别的格式,您必须将格式参数作为moment.utc的第二个参数传递,请参阅{{3}文档部分。

这是一个代码示例:

var input = "December 25, 2018 01:02:20";
var fmt = 'MMMM DD, YYYY HH:mm:ss';
var m = moment.utc(input, fmt);
console.log(m.local().format(fmt));
console.log(m.utc().format(fmt));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>