【问题标题】:Rails 4 Comparing Datetime in APIRails 4 比较 API 中的日期时间
【发布时间】: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


【解决方案1】:

Message.first.created_at 是否等于 Thu, 07 May 2015 01:16:43 UTC +00:00? (你有 Object.first.created_at 在那里)因为如果是,则控制台表达式的行为正确并且应该是正确的。

【讨论】:

    【解决方案2】:

    你尝试过这样的事情吗?

    Object.first.created_at > Time.parse('2015-05-06T21:16:43.611-0400')

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多