在 ruby on rails 中将 datetime 转换为 time 对象

Convert datetime to time object in ruby on rails

提问人:Priyanshu0007 提问时间:11/13/2022 最后编辑:Priyanshu0007 更新时间:11/14/2022 访问量:135

问:

我有一个这样的时间

“estimatedTime”: “2022-11-09T22:59:00Z”

作为 json,它被解析为 datetime 并保存在数据库中 (t.datetime “estimated_time”)。

我想找出此估计时间与当前时间(以小时为单位)之间的差异。

目前我正在使用

时间.now.utc

它为我提供了当前时间作为 Time 对象。

请建议如何解决此问题并找出它们之间的区别。首先,我不太清楚从json到datetime的转换会是什么样子。此外,我也对这个日期时间将如何转换为时间对象以找到差异感到困惑。我是 rails 和 ruby 的新手,所以我很困惑。

红宝石 2.7.5p203 轨道 4.2.11

我尝试了各种功能,但它导致了更多关于这里应该做什么的困惑。

Ruby-on-Rails 日期时间 Ruby-on-Rails-4 红宝石

评论

0赞 Supriya Medankar 11/13/2022
试试这个 stackoverflow.com/a/280464/5783088

答:

0赞 max 11/14/2022 #1

您无需在此处进行任何转换。只需在 Time/DateTime 上使用 - (minus) 方法,该方法以秒为单位给出两个时间之间的差值作为浮点数:

irb(main):013:0> Time.current - 1.hour.ago
=> 3599.9999717 # The rounding error is inherent to floats

即使 other 是 DateTime 或 ActiveSupport::TimeWithZone,这也有效。

然后,您可以使用ActiveSupport::D uration将秒转换为小时或任何其他时间单位:

irb(main):012:0> (Time.current - 1.day.ago).round.seconds.in_hours
=> 24.0

Rails 还具有内置的time_ago_in_words方法,可以使您的视图变得人性化。