icon
icon

PHPで時間を比較する方法を現役エンジニアが解説【初心者向け】

初心者向けにPHPで時間を比較する方法について現役エンジニアが解説しています。日時や時間を比較するには文字列や数値のようにはいきません。PHPではDateTimeクラスを使って比較します。日付が違うけれど時間が同じという場合にはtimeなどの関数を使います。日付の場合はdays関数を使います。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

今回は、PHPで時間を比較する方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

 

PHPについてそもそもよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、PHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPで時間を比較する方法について詳しく説明していくね!

大石ゆかり

お願いします!

PHPでシステムを開発する時に、日付や時間を比較したい、ということがあると思います。

日付や時刻などを文字列で比較すると、正しく比較できないことがあります。
例えば、

var_dump('09:23' == '9:23');
var_dump('2020/1/15' == '2020/01/15');

というコードがあった場合、どちらも結果はfalseが表示されます。

ここでは失敗しない日付や時間の比較方法について解説します。

PHPで時間を比較する

では、まず時間を比較してみましょう。

PHPにDateTimeクラスという、もともと用意されている日付や時間を扱うクラスがあります。それを使うと、時間の比較を簡単に行うことができます。

実際のコードを見てみましょう。

$time1 = new DateTime('09:23');
$time2 = new DateTime('9:23');
$time3 = new DateTime('11:50');

var_dump($time1 == $time2);
// bool(true) と表示されます

var_dump($time2 > $time3);
// bool(false) と表示されます

2つのDateTimeオブジェクトを比較することで、時間の比較ができました。

違う日付で同じ時間であることを調べるにはどうすればいいのでしょうか?

こちらも実際のコードで見てみましょう。

$time1 = new DateTime('2020/02/22 09:23:00');
$time2 = new DateTime('2020/03/10 09:23:00');

$diff = $time1->diff($time2);

if ($diff->h == 0 && $diff->i == 0 && $diff->s == 0) {
  echo '一致しています';
}
// 「一致してます」と表示されます

DateTimeクラスのdiffメソッドを使うと、DateIntervalオブジェクトを返します。このオブジェクトには、$time1と引数で与えられた$time2の差が格納されます。

DateIntervalオブジェクトは、どのくらいの差があるのかを、年・月・日・時・分・秒などで持っています。

上記のコードの例では、h(時)、i(分)、s(秒)がそれぞれゼロであることを確認することで、日付が違っていても同じ時間であることを判断できます。

PHPで日付を比較する

応用として、日付を比較してみましょう。

日付の表記の仕方はいろいろあります。日本では2020/2/22のように表記します。

しかしながら、MySQLなどのデータベースでは2020-02-22のように表記されます。文字列で単純に比較すると、正しく比較できません。

そこで、先ほどのDateTimeクラスを利用します。

$date1 = new DateTime('2020/2/20');
$date2 = new DateTime('2020-02-20');

var_dump($date1 == $date2);
// bool(true) と表示されます

では、時間を無視して比較するには、どうすればいいでしょうか?

先ほどと同じように、diffメソッドを利用します。

$datetime1 = new DateTime('2020/02/20 12:34:00');
$datetime2 = new DateTime('2020-02-20 23:34:56');

$diff = $datetime1->diff($datetime2);

if ($diff->days == 0) {
  echo '日付が同じです';
}
// 「日付が同じです」と表示されます

DateIntervalオブジェクトにdaysというプロパティがあります。

それは、2つのDateTimeオブジェクトの差の日数を持っています。それがゼロであれば、同じ日付であると判断できます。

このdaysプロパティは、差の日数だけなので、比較するDateTimeが過去であってもプラスの値が入っていますので注意が必要です。

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

PHPで日時を比較する

日時で比較するには、今まで考えてきたように、単純にDateTimeオブジェクトを比較できます。

$datetime1 = new DateTime('2020/02/20 12:34:00');
$datetime2 = new DateTime('2020-02-20 23:34:56');

if ($datetime1 == $datetime2) {
  echo '日時が同じです'; // 表示されません
}
if ($datetime1 > $datetime2) {
  echo '$datetime1の方が未来です'; // 表示されません
}
if ($datetime1 < $datetime2) {
  echo '$datetime2の方が未来です'; // 表示されます
}

 

筆者プロフィール

植西重史(うえにししげふみ)

職業プログラマー歴は2020年現在で27年、新卒入社当時はCOBOL・C言語。フリーランスになってからは主にPHPを使ってシステム開発、WordPressを使って企業ページなどを開発してきました。

TechAcademyではPHP/Laravel、はじめてのプログラミング、WordPressコースを担当しております。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも、PHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。