PHP

【PHP】日時を計算する2つの方法

投稿日:2016年7月17日 更新日:


現在日を起点にして日時を取得して処理したいことってよくありますよね。

例えば、現在日時の1日前のデータのステータスを変更するとか。

今回は、PHPで日時を計算する2つ方法をご紹介します。

  • PHPの内部関数のdate関数strtotime関数を組み合わせる方法。
  • 外部ライブラリのCarbonを使って日付計算をする方法。

では、それぞれ詳しく解説して行きます!

スポンサーリンク

date関数とstrtotime関数を組み合わせる方法

まずは、内部関数のdate関数とstrtotime関数を組み合わせて、日時を計算する方法について。

こちらは、ライブラリをインストールする必要もないので、手軽ですね。

関数のリファレンス

date関数

string date ( string $format [, int $timestamp = time() ] )

dateのPHPリファレンス

strtotime関数

int strtotime ( string $time [, int $now = time() ] )

strtotimeのPHPリファレンス

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を気に入っています。

最後までお読み頂きありがとうございました!

スポンサーリンク


-PHP

執筆者:

関連記事

【PHP】デフォルトの設定だと大量のPOSTパラメーターは途中で切れるので注意!!

PHPで大量のデータをPOSTすと、POSTしたデータが途中で切れるという問題が発生。 原因はなんて事はなく、php.iniの設定の問題でした。 対応方法を解説します。 スポンサーリンク 目次max_ …

【EC-CUBE2】CSVをUTF-8でダウンロードさせる修正方法

デフォルトのEC-CUBE2だと、ダウンロードされるCSVはShift-JISになっています。 おそらく、EXCELでCSVを編集する事を考慮しているのでしょう。 でも、Shift-JISだと困るシー …

【PHP】Shift-JISにエンコードしたCSVが文字化けするのはBOMが原因?

PHPでShift-JISに変換エンコードしたCSVをダウンロードする機能を実装したのですが、日本語の文字化けが発生。 この問題がちょっとややこしくて解決するのに時間がかかりました。 なんと文字化け …

PhpStormに乗り換えて良かった!オススメの5つの機能

EclipseからPhpStormに乗り換えて2年目に突入し、迷わずPhpStormのライセンスを更新しました。 PhpStormにはかな〜り満足しています。 開発効率はだいぶ上がったんじゃないでしょ …

【PHP】大きいリモートファイルをfreadすると途中で切れる【理由と解決法】

PHPでリモートファイル(httpやsshで読み込むファイル)をfreadする際、容量の大きいファイルを読み込むと、読み込みが途中で切れる事があります。 エラーなど発生せず、freadの結果が読み込み …

プロフィール

このサイトを運営しているDENです。
アングラーのフリープログラマー。 主にプログラミングと釣の話を発信しています。
プログラミングで自由になり思う存分に釣りをしまくる生活実践中。
詳しいプロフィールはこちら 
フォスターフリーランス