MongoDB中的日期和时间错误

时间:2019-02-22 02:18:37

标签: javascript node.js mongodb express

我正在构建一个博客站点,该站点记录条目发布并存储在MongoDB中的时间和日期。当我在本地计算机上运行它时,日期和时间是正确的。但是当我在Heroku上托管它时,日期显示它比我的时间早8小时。为什么会这样,我该如何解决?这是应用程序的链接:

Blog App

这也是负责发布条目并记录日期和时间的代码:

app.post("/compose", (req, res) => {
  const postTitle = req.body.postTitle;
  const postBody = req.body.postBody;

  let date = new Date();
  let postDate = date.toLocaleString('en-US');

  const post = new Post({
    date: postDate,
    title: postTitle,
    content: postBody
  });

  post.save(err => {
    if (!err) {
      res.redirect("/");
    }
  });
});

1 个答案:

答案 0 :(得分:1)

我的评论有些冗长,因此我将其发布为答案。


toLocaleString仅格式化给定的字符串,但其显示的时间仍将与其运行的服务器/客户端的系统时间绑定在一起。 由于您尝试过的两台计算机不在同一时区,因此会发生这种情况。

您可以考虑存储Date对象本身,因此它与将在其上运行程序的任何服务器都是不变的。另外,如果需要,它可以使您更轻松地执行Date操作。

或者,您可以像这样将所需的时区传递给toLocaleString

  let date = new Date();
  let postDate = date.toLocaleString("en-US", {timeZone: "America/New_York"});

  const post = new Post({
    date: postDate,
    title: postTitle,
    content: postBody
  });

您将在official Mozilla docs中找到有关toLocaleString的更多信息

您还将找到可在此Wikipedia条目中使用的时区名称的完整列表:List of tz database time zones。您可以使用状态为CanonicalAlias的任何时区。任何其他时区都将引发RangeError异常。