具有单个参数的JavaScript新Date()在Glitch上无法正常运行

时间:2018-07-05 06:29:11

标签: javascript date

我正在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()
    });
  }
});

我该如何解决这个问题?

2 个答案:

答案 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());