2016-09-20 4 views
0

今日の日付は2016-09-19です。私はそれに1年追加し、結果は2017-09-19と期待しています。代わりに、私は2017-09-20を得る。 1年プラス1日先。この動作は意図した通りですか?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" 
+0

http://stackoverflow.com/questions/7957107/why-is-date-today-6-months-6-months-date-today –

答えて

1

sinceまたはそのエイリアスを使用することができますfrom_nowオフセットTime.zone.nowに相当するTime.currentに基づいて計算する - 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.currentTime.zone.todayに相当するもあります:

1.year.since(Date.current) #=> Wed, 19 Sep 2017 
2

これは時間帯の問題です。私はUTC -7時間です。

Time.nowは、自分のタイムゾーンで時刻を返します。

1.year.from_nowは、UTC + 0,7時間前の時刻を返します。

ここは10時ですので、翌日のUTC + 0です。

3

あなたはタイムゾーンと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 
+0

私もタイムゾーンを設定する必要があるようです。 config。 UTCですべてを行う方がよいでしょうか? –

+0

さて、あなたのタイムゾーンを設定する必要はありますが、難しくありません(自分の投稿を編集しました:))あなたがそれをやっていなくても、あなたは常にあなたの方法の間の計算との違いを得ます。 –

関連する問題