日付オブジェクトで日付の加算や減算を行う

作成した Date クラスのオブジェクトに対して、日単位や月単位で加算や減算を行うことができます。ここでは Ruby で日付オブジェクトに対して日付の加算や減算を行う方法について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 17 日更新)

日単位で加算と減算を行う

最初に Date クラスのオブジェクトに対して日単位で加算や減算を行う方法です。 Date クラスで用意されているインスタンスメソッドの + または - メソッドを使用します。

require "date"

d = Date.today
afterDay = d + 1
beforeDay = d - 5

上記の場合、現在の日付から Date クラスのオブジェクトを作成し、そのあとで 1 日後の日付を表す Date クラスのオブジェクトと 5 日前の日付を表す Date クラスのオブジェクトを取得しています。

月単位で加算と減算を行う

次に Date クラスのオブジェクトに対して月単位で加算や減算を行う方法です。 Date クラスで用意されているインスタンスメソッドの << または >> メソッドを使用します。

require "date"

d = Date.today
beforeMonth = d << 1
afterMonth = d >> 5

上記の場合、現在の日付から Date クラスのオブジェクトを作成し、そのあとで 1 ヵ月後の日付を表す Date クラスのオブジェクトと 3 ヵ月前の日付を表す Date クラスのオブジェクトを取得しています。

なお例えば 3 月 31 日から 1 ヵ月後の日付オブジェクトを取得すると 4 月 31 日になりますが、 4 月には 31 日は存在しません。このように存在しない日付になった場合はその月の最終日である 4 月 30 日の日付オブジェクトが取得されます。

2つの日付の差分を取得する

Date クラスの - メソッドは日付と日付の差分を取得する場合にも使用できます。次の例を見て下さい。

require "date"

d1 = Date.new(2022, 3, 14)
d2 = Date.new(2022, 6, 8)

puts(d2 - d1)

Date クラスのオブジェクトに対して - メソッドを使って別の Date クラスのオブジェクトを減算すると、 2 つの日付オブジェクトの差を日単位の数値で取得することができます。上記の場合は 2 つの日付の差として 86 が表示されます。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

require "date"

d1 = Date.today
d2 = Date.new(2022, 1,1)

puts("本日の日付:" + d1.to_s)
puts("3日後の日付:" + (d1 + 3).to_s)
puts("5日前の日付:" + (d1 - 5).to_s)
puts("2ヶ月後の日付:" + (d1 >> 2).to_s)
puts("6ヶ月前の日付:" + (d1 >> 6).to_s)
puts("本日と2022/01/01との差は" + (d1 - d2).to_s + "日")

実行結果は次のようになります。

Dateオブジェクトの加減算

-- --

Ruby で日付オブジェクトに対して日付の加算や減算を行う方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。