Moment.js使用祖鲁时间问题.format()

时间:2018-05-30 16:29:46

标签: javascript node.js timestamp momentjs utc

我正在开发一个需要从数据库中检索和存储时间戳的脚本。来自数据库的时间戳被检索为UTC Zulu格式化字符串" YYYY-MM-DDTHH:MM:SS.SSSZ"。我希望将此时间戳存储为" YYYY-MM-DDTHH:MM:SS.SSS"在当地时间。我目前正试图用moment.js做这件事,我在" .toISOString()"上取得了一点成功。和其他方法。

但是,我注意到"时刻(时间戳)输出.format()"不会返回我期望从目前为止我所理解的关于UTC的字符串。这是一个复制我的问题的代码示例:

currentURL.contains("https://www.tourismpei.com/")

这是我的输出:

var moment = require('moment');

var timestamp = new Date('2018-05-30T15:01:01.111Z');

console.log(timestamp);
console.log(moment(timestamp).format('YYYY-MM-DDTHH:mm:ss.sss'));
console.log(moment(timestamp).format('YYYY-MM-DDTHH:MM:SS.SSS'));

这是我预料到的:

2018-05-30T15:01:01.111Z
2018-05-30T16:01:01.011
2018-05-30T16:05:11.111

为什么来自' YYYY-MM-DDTHH:mm:ss.sss'到&YYYY-MM-DDTHH:MM:SS.SSS'在.format()中导致不同的输出?我的预期输出是正确的还是有误解的时刻。(时间戳).format()?最后,考虑到这种情况,有没有更好的方法来实现我的预期输出?

1 个答案:

答案 0 :(得分:3)

  

http://momentjs.com/docs/#/displaying/format/

MM是几个月,这就是为什么你得到2018-05-30T16:05:11.111 5

没有sss,但有SSS

你说你想要这种格式“YYY-MM-DDTHH:MM:SS.SSS”我假设MM你的意思是分钟,因为你的预期结果。这是一种奇怪的方式来存储日期,因为没有几个月,而且重复几秒钟。

我建议以UTC格式存储。

var timestamp = new Date('2018-05-30T15:01:01.111Z');

console.log(timestamp);
console.log(moment(timestamp).format('YYYY-MM-DDTHH:mm:ss:SSS'));

// i'd suggest UTC over formating but if you were i'd use
console.log(moment(timestamp).format('YYYY-MM-DDTHH:MM:mm:SSS'));
//2018-05-30T15:01:01.111Z
//2018-05-30T16:01:01.111
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>

如果你想要它,请告诉我。