BackEnd

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

投稿日:2017年2月25日 更新日:

はじめに

普段PHPのお仕事をしています、tonnyです。
半年程前からRuby on Railsの勉強を始めました。
今回はよく使う時間に関するメソッドついてまとめたいと思います。

目次

環境について

今回の環境は以下の通りです。

  • Ruby 2.4.0
  • Rails 5.0.1

用途によって使い分け

現在時刻を取得

日付を指定したフォーマット

Rubyの組み込み関数であるstrftimeメソッドを使用します。

フォーマットはいくつか種類がありますが、基本はこの形で問題ないのかな、と思います。
Railsリファレンス-strftime-

日本語の曜日を出力する場合

フォーマットに従い、曜日を出力しようとすると、英語表記になります。

これを日本語に直す場合は、

  1. 日曜日から始まる、曜日の配列を作成
  2. 曜日の番号を取得

これらを組み合わせるのが良いのかな、と思います。
Timeクラスには、日曜日から始まる曜日の番号を返してくれるwdayというインスタンスメソッドがあるため、それを使用します。

指定した日時を取得

gmで世界協定時刻を、localで設定した地域の時刻を取得することができます。
なお、localで出力される「+0900」は世界協定時からの時差です。

UNIX TIMESTAMPを使ったあれこれ

現在時刻をタイムスタンプに変換、またはタイムスタンプから時刻を取得する方法は下記になります。

過去、未来の時刻を取得

経過秒数で計算することができます。

この計算をするのは少し面倒なので、Railsで用意されているTimeWithZoneクラスを使用してみたいと思います。

ActiveSupport::TimeWithZone

Railsが用意しているクラスであり、Timeクラスと互換性があります。
ただ、親クラスはObjectのようなので、継承しているわけではないようです。
もちろん、ふつうのRubyでは使用できません。
Railsリファレンス-ActiveSupport::TimeWithZone-

まずは設定

TimeWithZoneクラスは下記のように使用します。

あれ、世界協定のUTCになってる。。。(このとき14時くらい)
調べてみると、ActiveSupportの設定が必要なようです。
Railsリファレンス-ActiveSupport::TimeZone-

そのため、config/application.rbに追記します。

これで再度Time.zone.nowを実行してみると、

JST時刻で表示されるようになりました!

Timeクラスとの互換性

Timeクラスのメソッドはほぼ使用できます。

便利メソッド

今日 / 明日 / 昨日

メソッドチェーンで、現在時刻から見て昨日とかもできます。

その日のはじめ / その日の終わり

「その日始まってから、その日が終わるまで」のような条件指定をすることはよくあると思います。
そういうときに、日付関数などで、日を指定して〜ではなく、下記のように取得できます。

個人的には、Timeクラスの中でもこういう風に書けるということが、かなり印象的でした。
見ただけで、「ああ、昨日1日が対象なんだ。」と分かります。

他にも月や年などで同じような書き方ができます。
個人的にも何かないかと思ったら、下記で調べてみようと思います。
Railsリファレンス-Time-
Railsリファレンス-Date-

さいごに

ActiveSupportをふつうのRubyでも使用することができるようです。
Rails Guides

時間関係のメソッドを試していると、ここはRuby、こっちはRailsのメソッド、と意識するようになるので、勉強になりました。
今後もこのような形式で、クラス単位で試したことを記事にしたいと思います。

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

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

CAPTCHA


関連記事

crypto

公開鍵暗号の概要、用語と使用例

1 はじめに1.1 前提条件2 暗号化と復号2.1 暗号化とは2.2 復号とは3 暗号化方式3.1 共通鍵暗号3.2 公開鍵暗号4 署名と検証4.1 署名とは4.2 検証とは5 RSA暗号とは5.1 ...

Go言語

Go 1.23 でslicesとmapsに追加された関数

1 はじめに2 slicesパッケージに追加された関数2.1 All2.2 Backward2.3 Values2.4 AppendSeq2.5 Collect2.6 SortedFunc2.7 Ch ...

laravel logo

Laravelの認可機能Gateを使ってみた

1 はじめに2 やる事3 Gate3.1 登録3.2 利用4 Policy5 ミドルウェアでの使用6 さいごに7 おすすめ書籍 はじめに Laravelには認可機能を簡単に実装出来るGateという機能 ...

Go言語

Golangのファイル操作基本

1 はじめに2 ファイル/ディレクトリの操作2.1 ファイル/ディレクトリの存在を確認2.2 ファイル/ディレクトリの名前変更2.3 ファイル/ディレクトリの削除2.4 ディレクトリ内のファイル確認2 ...

rails

Shrineをモデルに関連付けないで使用してハマったこと

1 はじめに2 アップロード時にリサイズする3 アップロード時のバリデーション4 アップロード時に古いファイルを削除する5 さいごに はじめに ShrineはRailsでのアップロードを簡単に行えるよ ...

フォロー

blog-page_side_responsive

2017年2月
 1234
567891011
12131415161718
19202122232425
262728  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。