首页 > 解决方案 > Rails 将日期对象传递给 javascript

问题描述

这是我的代码,但似乎遇到了一些错误。

首先,@user.birthday是一个 Date 对象,我Tue, 14 Aug 2018在 Rails 控制台中设置它。

<script type="text/javascript">
  $(function() {
    console.log(new Date(<%= (@user.birthday.to_s) %>));
  });
</script>

但是,它打印Wed Dec 31 1969 16:00:01 GMT-0800 (Pacific Standard Time).

标签: javascriptruby-on-railsdate

解决方案


在该页面上执行“查看源代码”并查看 JavaScript,您会看到:

console.log(new Date(2018-08-14));

这与说:

console.log(new Date(1996));

当你给 JavaScript 的Date构造函数一个数字时,它会将该数字视为自 1970-01-01 以来的秒数:

value
整数值,表示自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,忽略闰秒(Unix 纪元;但请考虑大多数 Unix 时间戳函数以秒计)。

这就是“1969 年 12 月 31 日星期三 16:00:01 GMT-0800(太平洋标准时间)”的来源。

获得正确日期的最简单方法是使用#to_json而不是#to_s构建字符串,然后将其标记为“HTML 安全”以防止 Rails 对双引号进行编码:

console.log(new Date(<%= @user.birthday.to_json.html_safe %>));

那应该给你:

console.log(new Date("2018-08-14"));

在生成的 JavaScript 中。


推荐阅读