javascript - Rails 将日期对象传递给 JavaScript

标签 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(太平洋标准时间)

最佳答案

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

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

这等同于:

console.log(new Date(1996));

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

value
Integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored (Unix Epoch; but consider that most Unix timestamp functions count in seconds).

这就是“Wed Dec 31 1969 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 中。

关于javascript - Rails 将日期对象传递给 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850428/

相关文章:

linux - 使用/bin/date 更改系统时间

javascript - 如何使用 flatiron Node 框架创建 Web 应用程序框架?

ruby-on-rails - 搜索twitter client.favorites api,不知道怎么用

PHP 确定提供的日期中的下一个是星期一还是星期四

ruby-on-rails - 现实生活中是否有 RSpec 的完整 Rails 项目?

ruby-on-rails - 我应该如何在after_create回调中编写多个条件

Java JDBC : dates consistently two days off

javascript - 动态调整 paperjs 动画的帧速率

Javascript - 延迟 Promise 解析

javascript - 动态设置表格单元格子级 div 高度为其行高的 100%