代码之家  ›  专栏  ›  技术社区  ›  Foobar

momentjs解析通过get请求发送的unix时间戳不正确

  •  0
  • Foobar  · 技术社区  · 6 年前

    我有一个由2个字符串组成的数组,这两个字符串都在Unix时间内。

    [1484930449590,1548002449590]
    

    把这些数据转换回人类可读的时间给了我今天的日期和两年前的日期。

    但是,当我用momentjs解析这两个时间戳时:

    const start = moment(timeRange[0])
    const end = moment(timeRange[1])
    

    我收到以下值:

    moment("2001-01-01T00:00:00.000")
    moment("2001-04-01T00:00:00.000")
    

    出于某种原因,MomentJS将这两个时间戳都转换为2001年,即使年份应该是2019年和2017年。

    首先分析字符串并不能使事情变得更好:

    const start = moment(parseInt(timeRange[0]))
    const end = moment(parseInt(timeRange[1]))
    

    现在 start end 是:

    moment("1969-12-31T19:00:00.001")
    moment("1969-12-31T19:00:00.004")
    

    有人知道发生了什么事吗?

    我尝试了以下解决方案:

    console.log(timeRange)
    const start = moment(parseInt(timeRange[0]) / 1000)
    console.log(start)
    const end = moment(parseInt(timeRange[1]) / 1000)
    console.log(end)
    

    但没有改变:

    1484931697215,1548003697215
    moment("1969-12-31T19:00:00.000")
    moment("1969-12-31T19:00:00.000")
    

    更新:

    问题是我错了 timeRange 是一个数组。相反,它实际上是一根绳子。这是因为在客户端 时间长度 是一个数组,但当它作为get请求发送到服务器并使用 const timeRange = req.query.timeRange ,它被转换为字符串。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Laurens    6 年前

    时间戳以毫秒为单位,而不是以秒为单位。尝试先除以1000:

    const start = moment(parseInt(timeRange[0]/1000))
    const end = moment(parseInt(timeRange[1]/1000))
    

    那应该给你正确的日期

        2
  •  0
  •   Foobar    6 年前

    问题是我错了 timeRange 是一个数组。相反,它实际上是一根绳子。这是因为在客户端 时间长度 是一个数组,但当它作为get请求的一部分发送到服务器并使用const检索时 timeRange = req.query.timeRange ,它被转换为字符串。

    解决方法是重新转换 时间长度 返回数组:

    const times = req.query.timeRange.split(",")
    const startDate = moment(parseInt(times[0]))
    const endDate = moment(parseInt(times[1]))