【发布时间】:2015-05-07 16:32:15
【问题描述】:
您好,我在将日期时间与 Rails 4 JSON API 进行比较时遇到问题。
我使用具有 created_at 属性的范围
scope :later_than, -> (date) { where('created_at > ?', date) }
为 created_at 返回的 JSON 看起来像
"created_at" = "2015-05-07T01:16:43.611Z"
当发送相同的日期时间时,API 日志和 SQL 看起来像
Parameters: {"later_than"=>"2015-05-06T21:16:43.611-0400"}
created_at > '2015-05-06T21:16:43.611-0400'
在控制台中
Object.first.created_at
=> Thu, 07 May 2015 01:16:43 UTC +00:00
Object.first.created_at > '2015-05-06T21:16:43.611-0400'
=> true
最后一个比较应该是假的,但它是真的,而且作用域不能正常工作。
登录时
Object.first.created_at - '2015-05-06T21:16:43.611-0400'.to_datetime
=> 0.000402
那么会发生什么:
- API 返回截断为毫秒的日期时间
- Rails 将日期时间与微秒精度进行比较
因此,当向 API 发送相同的日期时间时,微秒将设置为 0,因此比较不会按预期进行。
有没有办法告诉 Rails:比较日期时间和毫秒精度?
【问题讨论】:
-
你的意思是你只想比较日期而不是时间?
-
现在发生的情况:API 返回截断为毫秒的日期时间,但是当将日期时间发送到 API 进行比较时,Rails 内部比较直到微秒,这就是比较不起作用的原因
-
您可以在值上使用 Ruby 的
.floor方法并比较它是否 >=0 并在其上创建一个布尔值?(可能不是理想的解决方案;))
标签: ruby-on-rails json api datetime