欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

Date.today是UTC时间, Date.current是locale时间, Time.current也是locale时间, 1.days.after也是locale时间。所以不要用Date.today, 用另外3种形式. 也不要用Time.now.

在console里面执行$ Date.current, 可以看到如下代码:

def current
  ::Time.zone ? ::Time.zone.today : ::Date.today
end

Date.current会判断时区,然后计算好时区以后返回当地时间。

在console里面执行$ 1.days.later, 可以看到如下代码:

def since(time = ::Time.current)
  sum(1, time)
end

这个也是基于时区来计算的,大部分情况下我们需要的就是基于时区的时间。

注: 美元符查看源码$ Date.currentpry的功能, 需要安装gem pry之后才能正常使用。

总结

大部分情况下我们应该用Date.current, 1.days.afterTime.current,不要用Date.today, 也不要用Time.now.

Rails里面没有Date.now.