在 PHP 中比较日期的不同方法

Habdul Hazeez 2023年1月30日
  1. strtotime()time() 比较日期
  2. 使用 Date() 函数和条件检查比较日期
  3. 使用自定义函数比较日期
  4. 使用 PHP Datetime 对象比较日期
  5. Arsort()strtotime() 进行多个日期的比较
在 PHP 中比较日期的不同方法

本文将教你如何使用 5 种不同的技术在 PHP 中比较日期。在这些技术中,有 4 种将以一种或另一种形式使用内置的 PHP 函数,如 strtotime()time()date()。最后一种技术将使用 PHP DateTime 对象。

strtotime()time() 比较日期

strtotime() 是 PHP 中内置的时间函数。它的主要用途是将一串人类可读的日期转换为相等的 UNIX 时间戳。它可以解析各种字符串并将它们转换为适当的时间戳。此类字符串的示例是 2 weeks agonext week

PHP time() 函数返回当前时间。这个时间是自 UNIX 纪元以来的秒数。如果你需要将这些秒数转换为当前日期,则需要 PHP 的内置 date() 函数。

结合这两个功能时,你可以使用以下步骤比较日期。

首先,你向 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()

现在,你有两件事可以比较,它们是,

  1. 你想比较的时间
  2. 字符串 today 传递给另一个 strtotime()

你可以使用严格比较来将日期与这些标准进行比较。你可以创建一个比较函数来检查以下内容。

  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