今天的日期是2016年9月19日。我给它增加了一年,我预计结果将是2017-09-19。相反,我得到2017-09-20。一年加一天。这是行为吗?1.year.from_now也提前一天
$ 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"
今天的日期是2016年9月19日。我给它增加了一年,我预计结果将是2017-09-19。相反,我得到2017-09-20。一年加一天。这是行为吗?1.year.from_now也提前一天
$ 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"
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
实例whi CH可以从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
或者,因为你正在使用日期:
还有Date.current
这相当于Time.zone.today
:
1.year.since(Date.current) #=> Wed, 19 Sep 2017
原来,这是一个时区的事情。我是UTC -7小时。
Time.now
返回我的时区中的时间。
1.year.from_now
返回UTC + 0的时间,比我所在的时间早7个小时。
现在是晚上10点,所以它是第二天UTC + 0。
如果你想获得ecactly日期与时间区域,您可以使用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
看来,我也需要配置我的时区在我的配置。以UTC来做所有事情会更好吗? –
是的,你应该设置你的时区,但并不难(我编辑我的文章):)即使你没有这样做,你总是会得到与你的方法之间的计算完全不同。 –
http://stackoverflow.com/questions/7957107/why-is-date-today-6-months-6-months-date-today –