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プログラミングで挫折しない学習方法を動画で公開中

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アプリケーション開発を習得できる、オンラインブートキャンプを開催しています。

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する