javascript - 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)
.
解决方案
在该页面上执行“查看源代码”并查看 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 中。
推荐阅读
- python - 在数据帧的每一行上应用函数并同时增加一个计数器
- xml - 递归遍历节点的 RML 映射,每次都附加父属性
- linux - 如何连续 grep 日志文件并使用单行命令打印到 shell
- swift - 在 UITesting 中获取 SKProducts
- javascript - 如何将内联 CSS 添加到使用 Javascript 动态创建的元素?
- r - 根据前一个函数将函数应用于下一行,以获得 R 中的不同 id
- php - PHP SQL 查询不等待恢复完成
- scheme - 使用 Scheme 以原始模式从终端读取字符
- r - 错误:`mutate()` 输入`model` 有问题。x object '.x' not found i Input `model` is `map(...)` in R tidyverse/dplyr? 游侠模型
- ruby-on-rails - 在我的 Gem 的 RSpec 测试中模拟“Rails.logger”