我对 有点困惑Date.yesterday(),例如:
$ rails c
Loading development environment (Rails 6.0.3.2)
irb(main):001:0> Date.today
=> Fri, 10 Jul 2020
irb(main):002:0> Date.yesterday
=> Wed, 08 Jul 2020
irb(main):003:0> Time.now
=> 2020-07-10 03:54:46.02207138 +0530
irb(main):004:0>
Run Code Online (Sandbox Code Playgroud)
但如果我没记错的话,如果今天是星期五,这是真的,前一天应该是星期四,就像我在小学学到的那样。
这里发生了什么?
tl;dr:使用Date.currentandTime.current代替Date.todayand Time.now。
您的应用程序有自己的时区,Time.zone. Ruby 不知道时区,但 Rails 知道。Rails部分更新Time并Date了解时区,但不是完全更新。Rails 添加的任何方法都可以识别时区。Date.yesterday和Date.tomorrow,例如。内置的 Ruby 方法将其单独保留,例如Date.today. 这引起了一些混乱。
Date.today根据您当地的时区,+0530 今天给出。Date.yesterday昨天根据您的应用程序的时区给出,我猜是 +0000 (UTC)。2020-07-10 03:54:46 +0530 是 2020-07-09 22:24:46 UTC 所以Date.yesterday是 2020-07-08。
使用Date.current代替Date.today。Date.yesterday是一个薄包装Date.current.yesterday。同样,使用Time.current代替Time.now。
ThoughtBot 文章It's About Time (Zones)详细讨论了 Rails 时区,并提供了简单的注意事项和注意事项以避免时区混淆。
不要使用
使用
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |