現在日を起点にして日時を取得して処理したいことってよくありますよね。
例えば、現在日時の1日前のデータのステータスを変更するとか。
今回は、PHPで日時を計算する2つ方法をご紹介します。
- PHPの内部関数のdate関数とstrtotime関数を組み合わせる方法。
- 外部ライブラリのCarbonを使って日付計算をする方法。
では、それぞれ詳しく解説して行きます!
スポンサーリンク
date関数とstrtotime関数を組み合わせる方法
まずは、内部関数のdate関数とstrtotime関数を組み合わせて、日時を計算する方法について。
こちらは、ライブラリをインストールする必要もないので、手軽ですね。
関数のリファレンス
date関数
string date ( string $format [, int $timestamp = time() ] )
strtotime関数
int strtotime ( string $time [, int $now = time() ] )
date()とstrtotime()で時刻を取得するサンプル
date関数に渡す$timestampパラメータにstrtotime関数の戻り値を指定する事で様々な時刻が取得可能です。
年、月、週、日、時、分、秒とほぼ全ての単位で計算可能です!
使い方は簡単なので、サンプルソースを見るのが早いでしょう!
// ================ // 日時系 // ================ // 一年後を取得する echo date("Y-m-d", strtotime("+1 year")); // 1日後を取得する echo date("Y-m-d", strtotime("+1 day")); // 5日前を取得する echo date("Y-m-d", strtotime("-5 day")); // 1週間後を取得 echo date("Y-m-d", strtotime("+1 week")); // 1ヶ月後を取得 echo date("Y-m-d", strtotime("+1 month")); // 来週の月曜日を取得する echo date("Y-m-d", strtotime("next monday")); // 先週の月曜日を取得する echo date("Y-m-d", strtotime("last monday")); // ================ // 時刻系 // ================ // 10時間後を取得する echo date("Y-m-d H:i:s", strtotime("+10 hour")); // 30分前を取得する echo date("Y-m-d H:i:s", strtotime("-30 min")); // 10秒後 echo date("Y-m-d H:i:s", strtotime("+10 sec"));
意外と簡単に日付の計算が出来ることがおわかり頂けたでしょうか。
簡単な日付の計算は、内部関数だけでもサクッと出来ちゃいますね!
Carbonを使って日付計算をする方法
もうひとつの方法は、外部ライブラリのCarbonを利用する方法。
このライブラリは、日時の操作を簡単にするライブラリで、有名なフレームワーク「Laravel」にも組み込まれているのでメジャーなライブラリと言えるでしょう。
インストール方法
Composerを使ってインストールしましょう。
composer require nesbot/carbon
使い方
サンプルはこちら。
require 'vendor/autoload.php'; use Carbon\Carbon; // 現在時刻 $carbon = Carbon::now(); echo $carbon; // 明日 $carbon = Carbon::yesterday(); echo $carbon; // 1ヶ月後 $carbon = Carbon::now()->addMonths(1); echo $carbon; // 月初 $carbon = Carbon::now()->firstOfMonth(); echo $carbon; // 週初め $carbon = Carbon::now()->startOfWeek(); echo $carbon;
date関数とstrtotime関数を組み合わせる方法よりも直感的で分かりやすいですね。
月初や週始めも、関数1つで取れるのも素晴らしいです。
ライブラリをインストールするは少し手間ですが、Carbonを使ったほうがプログラムは綺麗になりますね!
おわりに
PHPで日時を操作する方法のご紹介でした。
簡単なプログラムなら、内部関数でも解決できますが、それなりの規模のシステムを構築するならCarbonを導入するのも良いですね!
個人的には、最近発見したCarbonを気に入っています。
最後までお読み頂きありがとうございました!