momentJS中,new Date(..).getTime()不等于moment(..).valueOf()吗?

24

new Date(..).getTime() 应该返回一个毫秒级别的时间戳。根据 momentJS 的 文档,表达式 moment(..).valueOf() 也应该做到同样的事情(为给定日期返回毫秒级别的时间戳)

我用以下示例数据进行了检查:

var timeStampDate = new Date("2015-03-25").getTime(); //timestamp in milliseconds?
> 1427241600000
var timeStampMoment = moment("03-25-2015", "MMDDYYYY").valueOf(); //timestamp in milliseconds?
> 1427238000000

你可以看到结果不一样了。

现在我正在寻找一个 momentJS 的函数,它能给我返回和 new Date(..).getTime() 表达式完全相同的数据。


3
这并不能解决你的问题,但通常最好让格式字符串与输入格式相匹配: moment("03-25-2015", "MM-DD-YYYY") - Peter Olson
2个回答

47

Date 构造函数 文档:

使用 UTC 时区来解释不包含时区信息的 ISO 8601 格式的参数。

moment 构造函数 文档:

如果未指定时区偏移量,则解析字符串将创建一个以当前时区为基础的日期。

因此,在 moment 构造函数中指定时区会产生与 Date 相同的行为:

var timeStampMoment = moment("03-25-2015 +0000", "MM-DD-YYYY Z").valueOf(); //> 1427241600000

7

当您向Date和moment传递相同的值时(至少在Chrome中几年后),您将从这两个值中获得相同的值。

new Date("2015-03-25").getTime()
1427241600000
moment("03-25-2015", "MMDDYYYY").valueOf()
1427259600000
new Date("03-25-2015").getTime()
1427259600000

你实际上遇到的只是在Date.parse中不同猜测的日期格式。

感谢解释。 - GoreDefex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接