【问题标题】:new Date(..).getTime() is not equal to moment(..).valueOf() in momentJS?new Date(..).getTime() 不等于 momentJS 中的 moment(..).valueOf()?
【发布时间】:2015-07-14 08:22:47
【问题描述】:

new Date(..).getTime() 应该以毫秒为单位返回时间戳。根据documentation of 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() 完全相同。

【问题讨论】:

  • 这并不能解决您的问题,但通常最好让格式字符串与输入格式匹配:moment("03-25-2015", "MM-DD-YYYY")

标签: javascript momentjs


【解决方案1】:

日期构造函数doc:

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

时刻构造函数doc:

除非您指定时区偏移,否则解析字符串将在当前时区创建日期

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

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

【讨论】:

    【解决方案2】:

    当您将相同的值传递给 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中日期格式的不同猜测

    【讨论】:

    • 欣赏解释
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2019-05-06
    • 2010-09-26
    • 2020-08-23
    • 1970-01-01
    • 2020-03-12
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多