PHP で日付を比較するさまざまな方法

Habdul Hazeez 2023年1月30日
  1. 日付を strtotime() および time() と比較する
  2. 日付を Date() 関数および条件付きチェックと比較する
  3. カスタム関数で日付を比較する
  4. PHP Datetime オブジェクトと日付を比較する
  5. Arsort() および strtotime() との複数の日付の比較
PHP で日付を比較するさまざまな方法

この記事では、5つの異なる手法を使用して PHP で日付を比較する方法を説明します。これらの手法のうち、4 は、strtotime()time()date() などの組み込みの PHP 関数をいずれかの形式で使用します。最後の手法では、PHP の DateTime オブジェクトを使用します。

日付を strtotime() および time() と比較する

strtotime() は、PHP に組み込まれている時間関数です。その主な用途は、人間が読める形式の日付の文字列を等しい UNIX タイムスタンプに変換することです。さまざまな文字列を解析し、それらを適切なタイムスタンプに変換できます。このような文字列の例は、2 weeks agonext week です。

PHP time() 関数は現在の時刻を返します。この時間は、UNIX エポックからの秒数です。これらの秒を現在の日付に変換する必要がある場合は、PHP の組み込みの date() 関数が必要になります。

これら 2つの機能を組み合わせる場合、次の手順を使用して日付を比較できます。

まず、strtotime() に日付文字列を指定します。UNIX タイムスタンプに変換します。

time() 関数を使用して、現在の時刻からこの UNIX タイムスタンプを減算します。

この計算の結果と条件付きチェックを使用して、日付を比較できます。

<?php
  $dateString = '2021-12-12 21:00:00';

  // This will check if the time
  // is in the last day
  if ((time() - (60 * 60 * 24)) < strtotime($dateString)) {
      echo "Date in the last 24hrs";
  } else {
      echo "Date is <b>NOT</b> in the last 24hrs";
  }
?>

出力:

Date is <b>NOT</b> in the last 24hrs

日付を Date() 関数および条件付きチェックと比較する

PHP の date() 関数を使用すると、タイムスタンプを目的の形式にフォーマットできます。問題のタイムスタンプは、現在の時刻と UNIX エポックの間の秒数です。UNIX エポックは、1970 年 1 月 1 日の深夜からの時間です。

date()関数の値は、php.ini ファイルで設定されているタイムゾーンによって異なります。

date() 関数を使用して特定の日付を比較する場合は、次のようにします。

  1. 現在のタイムスタンプを目的の形式に変換します
  2. 比較したい日付を適切な文字列に記入します
  3. 日付文字列と現在のタイムスタンプの間で条件付きチェックを実行します
<?php
  $todaysDate = date("Y-m-d H:i:s");
  $dateString = "2021-10-12 10:00:00";
  
  if ($dateString < $todaysDate) {
      echo "The date you supplied is LESS than the current date";
  } else {
      echo "The date you supplied is NOT LESS than the current date";
  }
?>

出力:

The date you supplied is LESS than the current date

カスタム関数で日付を比較する

関数を使用して、コードの繰り返しを回避します。このチュートリアルの最初の例は、日付を strtotime() および time() と比較する方法を示しました。

この場合、関数を作成します。この関数は、日付文字列をパラメーターとして受け取り、それが strtotime() に渡されます。文字列"today"を関数内の別の strtotime() に渡します。

これで、比較できる 2つのことがあります。それは、

  1. 比較したい時間
  2. 別の strtotime() に渡された文字列 today

厳密な比較を使用して、日付をこれらの基準と比較できます。比較関数を作成して、以下を確認できます。

  1. 今日の日付
  2. 過去の日付
  3. 将来の日付

以下は、指定された日付文字列が現在の日付であるかどうかを確認します。

<?php
  function checkToday($time) {
      $convertToUNIXtime = strtotime($time);
      $todayUNIXtime = strtotime('today');
  
      return $convertToUNIXtime === $todayUNIXtime;
  }
  
  if (checkToday('2021-12-13')) {
      echo "Yeah it's today";
  } else {
      echo "No, it's not today";
  }
?>

出力:

No, it's not today

過去の日付を確認してください。

<?php
  function checkThePast($time) {
      $convertToUNIXtime = strtotime($time);
  
      return $convertToUNIXtime < time();
  }
  
  if (checkThePast('2021-12-13 22:00:00')) {
      echo "The date is in the past";
  } else {
      echo "No, it's not in the past";
  }
?>

出力:

The date is in the past

将来の日付は以下で確認できます。

<?php
  function checkTheFuture($time) {
      $convertToUNIXtime = strtotime($time);
  
      return $convertToUNIXtime > time();
  }
  
  if (checkTheFuture('2021-12-13 22:00:00')) {
      echo "The date is in the future";
  } else {
      echo "No, it's not in the future";
  }
?>

出力:

No, it's not in the future

PHP Datetime オブジェクトと日付を比較する

PHP DateTime クラスは、PHP で日付文字列を操作するためのオブジェクト指向の方法を提供します。使用できる一連のメソッドがあります。舞台裏でいくつかのロジックをカプセル化し、操作するためのクリーンなインターフェイスを提供します。

strtotime() および date() と比較して、DateTime には次の利点があります。

  1. より多くの日付文字列で機能します
  2. 作業が簡単です
  3. 日付の直接比較を提供します

日付を DateTime と比較する場合は、次のようにします。

  1. 日付文字列を DateTime オブジェクトに解析します
  2. 日付を、より小さい(<)、より大きい(>)、または等しい(==)などの演算子と比較します。
<?php
  $firstDate = new DateTime("2020-12-13");
  $secondDate = new DateTime("2021-12-13");
  
  // Compare the date using operators
  if ($firstDate > $secondDate) {
      echo "First date is GREATER than the second date";
  } else if ($firstDate < $secondDate) {
      echo "First date is LESS than the second date";
  } else {
      echo "First and second dates are EQUAL";
  }
?>

出力:

First date is LESS than the second date

Arsort() および strtotime() との複数の日付の比較

多くの日付文字列を比較する場合は、それらを配列に格納できます。

配列内の日付を使用して、適切なループメソッドを使用して配列を操作できます。たとえば、foreach

foreach 内のループでは、strtotime() を使用して各日付を UNIX タイムスタンプに変換できます。その後、arsort() で日付を並べ替えることができます。

<?php
  // Store the dates
  $dateArray = ["2020-09-30", "2021-12-13", "2021-08-05"];
  
  // Convert each date to a UNIX timestamp
  // and store them in another array
  $dateArrayTimestamp = [];
  foreach ($dateArray as $date) {
      $dateArrayTimestamp[] = strtotime($date);
  }
  
  // Sort the dates,
  arsort($dateArrayTimestamp);
  
  // Print the date starting with the
  // current date
  foreach ($dateArrayTimestamp as $key => $value) {
      echo "$key - " . date("Y - m - d", $value) . "<br>";
  }
?>

出力:

1 - 2021 - 12 - 13<br>2 - 2021 - 08 - 05<br>0 - 2020 - 09 - 30<br>
著者: Habdul Hazeez
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

関連記事 - PHP DateTime