我正在构建一个博客站点,该站点记录条目发布并存储在MongoDB中的时间和日期。当我在本地计算机上运行它时,日期和时间是正确的。但是当我在Heroku上托管它时,日期显示它比我的时间早8小时。为什么会这样,我该如何解决?这是应用程序的链接:
这也是负责发布条目并记录日期和时间的代码:
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("/");
}
});
});
答案 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。您可以使用状态为Canonical
或Alias
的任何时区。任何其他时区都将引发RangeError
异常。