javascript - MomentJS 错误地解析通过 GET 请求发送的 Unix 时间戳
问题描述
我有一个包含 2 个字符串的数组,它们都是 Unix 时间。
[1484930449590,1548002449590]
将这些转换回人类可读的时间会给我今天的日期和 2 年前的日期。
但是,当我使用 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
成为一个数组。相反,它实际上是一个字符串。发生这种情况是因为在客户端timeRange
是一个数组,但是当它作为 GET 请求发送到服务器并使用 检索时const timeRange = req.query.timeRange
,它被转换为字符串。
解决方案
您的时间戳以毫秒为单位,而不是以秒为单位。尝试先除以 1000:
const start = moment(parseInt(timeRange[0]/1000))
const end = moment(parseInt(timeRange[1]/1000))
那应该给你正确的日期
推荐阅读
- cypress - cypress-cucumber - 将值从一步定义传递到另一步定义
- c# - .net 核心中间件创建中 next(context) 与 await next.Invoke(context) 之间的区别
- c# - 向数组添加元素有效,但未显示在其他 switch 语句中
- html - Knockout js:有条件地绑定title属性
- javascript - 如何在 Vuejs 嵌套条件语句中选中一个框
- django - 导入额外库时,用于 python 单元测试的 Visual Studio 代码调试工具不显示调试工具
- alwayson - 两个集群组之间的读取规模副本
- java - Java/Kotlin 的虚拟环境
- python - 生成具有约束的随机数时,循环不一致地崩溃
- tensorflow-lite - Android上的对象跟踪