Displaying inaccurate date using moment.js
使用nodejs、jade和moment.js
每次用户创建条目并更新发布日期。它是动态的。
示例:原始日期显示"Thu Jan 01 2015 08:00:00 GMT 0800 (SGT)"
在网页上,使用 momentjs 转换原始日期,因此仅显示 Jan 01 2015。
脚本
1 2 3 4
| $('.post-date').each(function(i, e) {
var date = $(this).text();
$(this).html(moment(date).format("DD MMMM YYYY"));
}); |
但这显示的日期不正确,例如:2015 年 1 月 2 日。
不知道为什么它显示的日期不正确。
感谢您的帮助。
- 你是说 entry.published_at 是一个 Date 对象吗?如果是这样,您在创建 moment 时会将其解析为字符串。您应该只是格式化它开始而不是重新解释它。
-
@MattJohnson 是的,它是带有时刻 js 的后端的 Date 对象。哦,所以你的意思是 published_at 应该在后端格式化?
-
我的意思是你首先将它作为 div 标签中的字符串呈现(可能是隐式的)。然后您的 jquery 函数正在解析该字符串并立即重新格式化它。如果您删除该功能会发生什么 - 它是否显示为您显示"示例原始日期......"?那是一个字符串。
-
当然 - 你可以在后端运行时刻,因为它是节点。那可能是最简单的。但是,如果您在前端运行它,则需要注意正在解析的字符串。例如,您可以在后端调用 .toISOString() 的日期,然后在前端更容易解析它。
-
@MattJohnson - 非常感谢。让它在前端而不是后端工作。
@MattJohnson - 建议格式化日期而不是解析。
也许是因为时区。
看看这个链接:http://momentjs.com/timezone/
- 啊这意味着我也需要转换时区?
-
我建议您将 moment.js 集成到您的服务器代码中,以便在客户端执行之前根据需要渲染 #{entry.published_at} ...或者您可以传递带有数据的 JSON,然后渲染到模板。我个人使用 nunjucks 作为我的 node.js 项目的模板引擎 :)