このエントリーをはてなブックマークに追加

2016年12月18日日曜日

はじめの一歩 -Rails 時間・タイムゾーン編- その5

どうも、はじめです。

前回は幾つかのタイムゾーンの紹介と、任意のタイムゾーンでの日時の取得について書いてみました。
「はじめの一歩 -Rails 時間・タイムゾーン編- その4」
今回は月や週などの最初と最後を取得する方法を書いていきます。

はじめに、

前提として今回はTimeWithZoneクラスを使用して、
タイムゾーンはJSTでの実行例を載せていきます。

それでは、年月週などそれぞれの最初と最後を取得する方法を書いていきます。

Time.zone.now.beginning_of_year
# => Fri, 01 Jan 2016 00:00:00 JST +09:00
Time.zone.now.end_of_year
=> Sat, 31 Dec 2016 23:59:59 JST +09:00

Time.zone.now.beginning_of_month
# => Thu, 01 Dec 2016 00:00:00 JST +09:00
Time.zone.now.end_of_month
# => Sat, 31 Dec 2016 23:59:59 JST +09:00

Time.zone.now.beginning_of_week
# => Mon, 12 Dec 2016 00:00:00 JST +09:00
Time.zone.now.end_of_week
# => Sun, 18 Dec 2016 23:59:59 JST +09:00
週の最初は月曜日、最後は日曜日と言うかたちで取得されます。

Time.zone.now.beginning_of_day
# => Sun, 18 Dec 2016 00:00:00 JST +09:00
Time.zone.now.end_of_day
# => Sun, 18 Dec 2016 23:59:59 JST +09:00
ちなみに、
Time.zone.now.beginning_of_day
は以下のようにも書くことができます。
Time.zone.now.midnight
# => Sun, 18 Dec 2016 00:00:00 JST +09:00

現在時刻を14時代だとした場合、
以下のように14時の0分0秒、59分59秒を取得してくれます。
Time.zone.now.beginning_of_hour
# => Sun, 18 Dec 2016 14:00:00 JST +09:00
Time.zone.now.end_of_hour
# => Sun, 18 Dec 2016 14:59:59 JST +09:00

時と同様に現在時刻を14時27分とした場合、
以下のように取得できます。
Time.zone.now.beginning_of_minute
# => Sun, 18 Dec 2016 14:27:00 JST +09:00
Time.zone.now.end_of_minute
# => Sun, 18 Dec 2016 14:27:59 JST +09:00

ちなみに、
以下のように書くことで、任意の曜日の最初を取得することもできます。
Time.zone.now.beginning_of_week(:tuesday)
# => Tue, 13 Dec 2016 00:00:00 JST +09:00
end_of_weekに曜日を指定すると以下のようになります。
Time.zone.now.end_of_week(:tuesday)
# => Mon, 19 Dec 2016 23:59:59 JST +09:00
来週の指定した曜日の最後ではなく、
その日の前日の最後を取得するようなので注意が必要です。


最後に、

曜日を表示する際は日曜日を0として取得をしますが、
beginning_of_weekやend_of_weekで取得する日時は
日曜日ではなく月曜日を最初として取得するので意外でした。
end_of_weekで曜日を指定した場合も含め週を扱う際は、
一度確認をしてから使用すると良いと思います。

次回

次はおまけでapplication.rbにて
タイムゾーンを設定する方法を書きたいと思います。

0 件のコメント:

コメントを投稿