javascript - EJS 文件显示日期不正确(日期落后一号)
问题描述
我有一个 ejs 文件显示来自我的节点服务器和猫鼬数据库的日期。在服务器和数据库中,日期是正确的,我为日期设置了一个 console.log,它返回:
2020-06-10T00:00:00.000Z
6月10日,如期而至。但是,当我将它显示在 ejs 文件中时,它显示为 6 月 9 日:
<p><%= ticket.due_date.toDateString() %></p>
它在页面上显示为
Tue Jun 09 2020
当我使用 moment 重构发送到 ejs 文件的日期格式时,这似乎也是一个问题:
console.log(ticket.due_date);
date = moment(ticket.due_date).format("YYYY-MM-DD");
console.log(date);
这输出到控制台中:
2020-06-10T00:00:00.000Z
2020-06-09
是否有一些我遗漏的格式问题,或者它是系统固有的,如果是这样,我如何简单地在 ejs 文件中添加一天以使其正确?谢谢你。
解决方案
ADate
不是字符串;它是一个封装了某个时刻的对象(在内部,一个很大的数字)。它不包含任何其他有趣的细节,例如您用来创建它的字符串最初是如何格式化的。因此,当您输出一个Date
with 时.toDateString()
,将根据 JavaScript 规范简单地为时间戳输出一个字符串.toDateString()
。
有许多有效的方法可以将 a 格式化Date
为字符串。我会浏览Date
. 例如,一个选项.toISOString()
似乎是您期望的格式。如果您想以多种格式输出用户友好的日期,则需要查看Moment.js
.
更新:
您似乎对日期有误解。像示例这样的 ISO 8601 日期2020-06-10T00:00:00.000Z
表示 UTC 午夜(又名 GMT、祖鲁语等)。aDate
不代表本地日历日期,它代表一个时刻,特别是自 1970 年 1 月 1 日 UTC 以来的毫秒数。这意味着当你处理 JavaScript 日期时,你应该有意识地构造它们,并适当地理解它们代表一个时间点。例如,如果您希望日期反映当地时区的午夜,您可以使用构造函数:
const date = new Date(2020, 5, 10);
...并且当您输出日期时,您应该记住查看时间的人可能在不同的时区,因此日期可能不会反映为完全相同的东西。
如果您想处理日历日期而不是时间戳(这将是一个更好的名称Date
),那么您可以在整个过程中使用 UTC 日期,并确保在输出字符串时指定您希望使用格式化日期UTC 时间偏移量。或者,如果您不想要时间戳的任何语义,您可能想要坚持使用字符串。
推荐阅读
- authentication - Mocha/Chai登录方法单元测试nodejs
- applescript - 有什么方法可以将 Autohotkey 转换为 Apple Script?
- python - Python:检查方法是否使用@staticmethod
- r - 将日期时间列中的值转换为通用格式
- r - 如何计算数据框中 TRUE 语句的数量,条件是前一个元素在 R 中也是 TRUE?
- python-3.x - Python for循环与regullar的一行区别
- c# - 如何将 WebAPI 结果反序列化或格式化为特定的 json 结构
- jspdf - 获取 jspdf npm 包时出错:GET https://unpkg.com/jspdf@2.0.0/dist/jspdf.min.js net::ERR_ABORTED 404
- bash - 在 bash 中出现意外的错误
- django - 如何使用 django 将图像上传到 S3