今天的日期是2016-09-19。我加了一年,我希望结果是2017-09-19。相反,我得到2017-09-20。一年加一天。这种行为是否符合预期?
$ rails c
2.3.1 :001 > Time.now.to_date.iso8601
=> "2016-09-19"
2.3.1 :002 > 1.year.from_now.to_date.iso8601
=> "2017-09-20"
答案 0 :(得分:3)
如果您希望与时区保持紧密约会,可以使用Time.current
1.year.from_now
#=> Wed, 20 Sep 2017 05:38:50 UTC +00:00
Time.current
#=> Tue, 20 Sep 2016 05:39:08 UTC +00:00
答案 1 :(得分:2)
原来这是一个时区的事情。我是UTC -7小时。
Time.now
返回我的时区中的时间。
1.year.from_now
以UTC + 0的速度返回时间,比我的位置提前7小时。
现在是晚上10点,所以第二天是UTC + 0。
答案 2 :(得分:1)
since
或其别名from_now
根据Time.current
计算相当于Time.zone.now
的偏移量 - 两者都返回ActiveSupport::TimeWithZone
个实例:
Time.current #=> Mon, 19 Sep 2016 19:56:34 SST -11:00
Time.zone.now #=> Mon, 19 Sep 2016 19:56:35 SST -11:00
另一方面, Time.now
会在系统的时区中返回一个普通的Time
实例,该实例可能与Rails时区不同:
Time.now #=> 2016-09-20 08:56:36 +0200
为避免混淆,在Rails中工作时,应始终使用Time.current
/ Time.zone.now
。然而,你可以通过另一个"基准时间"到since
:
1.year.since(Time.now) #=> 2017-09-20 08:56:37 +0200
或者,因为您正在处理日期:
1.year.since(Date.today) #=> Wed, 20 Sep 2017
还有Date.current
相当于Time.zone.today
:
1.year.since(Date.current) #=> Wed, 19 Sep 2017