現在日を起点にして日時を取得して処理したいことってよくありますよね。
例えば、現在日時の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つで取れるのも便利ですね。
おわりに
PHPで日時を操作する方法のご紹介でした。
どちらの方法でも好みの方を使えば良いと思います。
この記事が少しでも参考になれば幸いです。
最後までお読み頂きありがとうございました。