今天的日期是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 –