Rails将日期对象传递给javascript

时间:2018-08-14 22:10:47

标签: javascript ruby-on-rails date

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

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

<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)

1 个答案:

答案 0 :(得分:1)

在该页面上执行“查看源代码”并查看JavaScript,您将看到以下内容:

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

这与说的一样:

console.log(new Date(1996));

为JavaScript的Date constructor提供一个数字时,它会将这个数字视为自1970-01-01以来的秒数:

  

value
  整数值,表示自1970年1月1日UTC时间00:00:00以来的毫秒数,忽略了leap秒(Unix时代;但是请考虑大多数Unix时间戳函数以秒为单位)。

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

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

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

应该给你的东西

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

在生成的JavaScript中。

相关问题