Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Ruby】Date型、DateTime型の計算

More than 1 year has passed since last update.

簡単なのに忘れがちなDate型、DateTime型の計算方法について。
計算方法というよりは計算結果についての備忘録だけど。
( ※ 計算結果は2019-06-01 時点 )

実行環境
Ruby 2.5.1

Date型の計算

誕生日から今日までの経過日数を計算する

require 'date'

today = Date.today()
birthday = Date.new(1985, 11, 27)

days = today - birthday
#=> (12239/1)

Date型の計算結果は「日数」で得られる。
ということでこの世に生を受けて12239日経過していることがわかったが、なぜか整数ではなく分数のような形で出力されている。
試しにデータ型を調べる。

today.class
#=> Date

birthday.class
#=> Date

days.class
#=> Rational

Rational型?
初見だったのでリファレンスで確認してみた。
Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Rationalクラス

有理数??
理系出身のはずなのに記憶が蘇ってこない、、、
助けてGoogle先生!

【有理数とは】実数のうち、整数か分数かの形で表せる数の総称。

なるほど。
ということで、整数型にしたければ単純に to_i してあげれば良さそう。

days.to_i
#=> 12239

DateTime型の計算

1日の勤務時間を計算する

require 'date'

work_from = DateTime.new(2019, 06, 01, 10, 00, 00)
work_to = DateTime.new(2019, 06, 01, 18, 00, 00)

work_times = work_to - work_from
#=> (1/3)

DateTime型も計算結果は「日数」で得られる。
そしてもちろんRational型。

勤務時間(h)を得たければ24を掛ける。

(work_times * 24).to_f
#=> 8.0

以上。

nekotter222
沖縄からフルリモート開発をするエンジニア。主言語はRuby。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away