使い方

参考:

Ruby、Rails の時間に関するメソッドを使用してみた | RE:ENGINES

まとめ

参考:

Ruby と Rails における Time, Date, DateTime, TimeWithZone の違い – Qiita

ついに RoR の日付の闇を払った – Qiita

Time.zone.now / Time.current

参考:

時刻処理では、Time.current, Time.zone.local を使う | DoRuby

TimeWithZone

参考:

ActiveSupport::TimeWithZone | Ruby on Rails API [Official]

TimeZone

参考:

ActiveSupport::TimeZone | Ruby on Rails API [Official]

rails/time_zone.rb at v5.2.3 · rails/rails – GitHub

Time::DATE_FORMATS の使い方

参考:

Time::DATE_FORMATS – Qiita

Rails で日付/時刻のフォーマットを設定する Tips | Rails Webook

日付/時間フォーマットのデフォルトを設定 – Qiita

to_formatted_s – Time | Ruby on Rails API [Official]

to_formatted_s – rails/conversions.rb at v5.2.3 · rails/rails – GitHub

In Ruby on Rails, how do I format a date with the “th” suffix, as in, “Sun Oct 5th”? – Stack Overflow

「○○分前」の表記をする

参考:

Rails で日時を「xx分前」、「xx時間前」表記にする | 酒と涙とRubyとRailsと

Rails で時間を「◯分前」「◯時間前」にフォーマットする – Qiita

Time#strftime

参考:

日付の表示方法メモ – Qiita

Rails の strftime チートシート – Qiita

strftime のよく使うテンプレート | TechRacho

Ruby の strftime で月日や時刻の0埋めを行わない書式指定 | ltcmdr927atenablog

strftime – ActiveSupport::TimeWithZone | Ruby on Rails API [Official]

instance method Time#strftime (Ruby 2.5.0)

曜日を日本語表示する

参考:

Rails での、日本語対応の短縮曜日の表示 – Qiita

日本語曜日入り日付フォーマットを1行で書く – Qiita

日付から曜日を日本語で取得する – Qiita

午前・午後

strftime%p を使って AM/PM を出力する。

Time.zone.now.strftime("%p")
# => "PM"

午前・午後を出力するためにロケールを設定する。

# config/locales/ja.yml
ja:
  time:
    am: 午前
    pm: 午後
    formats:
      pday: "%p"

I18n.localize を使って、午前・午後を出力する。

def localized_pday_ja(time)
  I18n.l(time, locale: :ja, format: :pday)
end

localized_pday_ja(Time.current)
# => "午後"

参考:

I18n で24時間表記を午前午後表記にする (日本語対応) – Qiita

Rails 12 hour AM/PM range for a day – Stack Overflow

TimeWithZone の使い方

タイムゾーンを設定する。

# config/application.rb
class Application < Rails::Application
  ...
  config.time_zone = "Tokyo"
  ...
end

タイムゾーンを確認する。

$ rails r "puts Time.zone"
(GMT+09:00) Tokyo

現在時刻を得る。

Time.zone.now

もしくは、

Time.current

今日の日付を取得する。

Time.zone.today

参考:

Ruby と Rails における Time, Date, DateTime, TimeWithZone の違い – Qiita

Rails での日付操作でよく使うものまとめ – Qiita

すぐ忘れるので、Ruby と Rails の日付操作周りについてまとめました – Qiita

Rails の time_zone の設定は initializers/* には書かない – Qiita

now – ActiveSupport::TimeZone | Ruby on Rails API [Official]

today – ActiveSupport::TimeZone | Ruby on Rails API [Official]

beginning_of_day / end_of_day

昨日作成されたレコードを取得する。

yesterday = Time.zone.yesterday
@records = Record.where(
  created_at: (yesterday.beginning_of_day)..(yesterday.end_of_day)
)

もしくは、

@records = Record.where(
  created_at: Time.zone.yesterday.all_day
)

参考:

beginning_of_day – Date | Ruby on Rails API [Official]

end_of_day – Date | Ruby on Rails API [Official]

all_day – DateAndTime::Calculations | Ruby on Rails API [Official]

TimeWithZone のインスタンスを作成する

数値から作成する。

Time.zone.at(1534759980)
# => Mon, 20 Aug 2018 19:13:00 JST +09:00

文字列から作成する。

Time.zone.parse("2018-08-20 19:13:00 +0900")
# => Mon, 20 Aug 2018 19:13:00 JST +09:00

参考:

ActiveSupport::TimeWithZone | Ruby on Rails API [Official]

to_s(:db)

Time#to_s(:db) はシステムもしくは環境変数で設定されたタイムゾーンで時刻を返す。

TimeWithZone#to_s(:db) はタイムゾーンとは無関係に UTC で時刻を返す。

参考:

Time#to_s(:db) と TimeWithZone#to_s(:db) は違うので注意 | memo_ruby

Rails の TimeWithZone クラスの to_s(:db) は UTC を返す – Qiita

parse

参考:

Rails parse datetime in model – Stack Overflow

to_datetime / to_date

参考:

to_datetime – rails/conversions.rb at v5.2.3 · rails/rails – GitHub

to_date – rails/conversions.rb at v5.2.3 · rails/rails – GitHub

指定した期間の特定の曜日の日付を取得する

1年間の土日を取得する。

weekend_dates = (Date.today..Date.today.next_year).select do |date|
  [0, 6].include?(date.wday)
end

参考:

Ruby だと日付ループがこんなに簡単に書けるのだ! – Qiita

How do I get all Sundays between two dates in Ruby? – Stack Overflow

ローカライズ

参考:

国際化機能使い方 – Qiita

Rails で日付をいい感じ (スラッシュ区切り) に表示する | SHOYAN BLOG

あなたはいくつ知っている? Rails I18n の便利機能大全!- Qiita

アプリの国際化の実装と考察 | ボクココ

日付・時刻フォーマットを追加する | Rails ガイド [公式]

Rails の日本語での日付表示について | teratail

i18n-js

参考:

Rails で i18n-js を使って JavaScript の国際化 | Startup Reality

fnando/i18n-js: It’s a small library to provide the I18n translations on the Javascript. It comes with Rails support. – GitHub

ago

1ヶ月前の日時を得る。

1.month.ago

参考:

1.month.ago とは何か – Qiita

ago – ActiveSupport::Duration | Ruby on Rails API [Official]

DateHelper

参考:

ActionView::Helpers::DateHelper | Ruby on Rails API [Official]

distance_of_time_in_words

参考:

distance_of_time_in_words – ActionView::Helpers::DateHelper | Ruby on Rails API [Official]

今日の判定

time_with_zone = Time.zone.now
time_with_zone.today?           # => true  (今日の日時かどうか判定)
time_with_zone.to_date.past?    # => false (昨日以前の日付かどうか判定)
time_with_zone.to_date.future?  # => false (明日以降の日付かどうか判定)

参考:

Check if DateTime value is today, tomorrow or later – Stack Overflow

DateTime

参考:

DateTime | Ruby on Rails API [Official]

Date

参考:

Rails での日付操作でよく使うものまとめ – Qiita

Date クラスチートシート 時系列順 – Qiita

年月日などの日付要素を取得する – 日付 (Date、DateTime) クラス | Ruby入門

Date | Ruby on Rails API [Official]

Time

参考:

Time 拡張 – Qiita

Time | Ruby on Rails API [Official]

DateAndTime::Calculations

参考:

DateAndTime::Calculations | Ruby on Rails API [Official]

DateAndTime::Zones

参考:

DateAndTime::Zones | Ruby on Rails API [Official]

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です