我正在Glitch.me上开发一个时间戳微服务,当我将一个数字传递给新的Date()构造函数时遇到了问题。根据文档,单个数字被视为毫秒,但是在Glitch上则是一年:
new Date(6546)
自动转换为“ 6546-01-01T00:00:00.000Z”
实际代码是:
app.get("/api/timestamp/:date_string", function(req, res) {
let d = new Date(req.params.date_string);
if (d == null || d == "Invalid Date") {
res.json({
unix: null,
utc: "Invalid Date"
});
} else {
res.json({
test: new Date(req.params.date_string),
unix: d.getTime(),
utc: d.toUTCString()
});
}
});
我该如何解决这个问题?
答案 0 :(得分:0)
从名称来看,我怀疑您要传递给new Date()
的值实际上是字符串,而不是数字。首先将其转换为数字。
let d = new Date(Number(req.params.date_string));
答案 1 :(得分:0)
请注意,在构造函数中传递一个数字参数时,它被用作日期的内部数字表示(以毫秒为单位),请注意我们没有传递字符串 >到构造函数。例如,传递参数5000将创建一个表示1/1/1970午夜五秒的日期。
对于您的情况,6546毫秒(即6.546秒)将返回1970年1月1日,因为当您从该日期起加上5秒时,两者之间的差异并不大。
但是现在,如果将“ 6546”毫秒作为字符串传递给构造函数,它将被视为6546年,并且输出将变为6546-01-01T00:00:00.000Z。 检查是否传递数字值而不是字符串,以及是否正确计算了以毫秒为单位的值。 参考:https://www.tutorialspoint.com/javascript/javascript_date_object.htm
对于分别传递给构造函数的字符串和数字参数/值,请尝试使用此代码。
console.log(new Date("6546").toLocaleDateString());
console.log(new Date(6546).toLocaleDateString());