在 PHP 中比较日期的不同方法
-
用
strtotime()
和time()
比较日期 -
使用
Date()
函数和条件检查比较日期 - 使用自定义函数比较日期
-
使用 PHP
Datetime
对象比较日期 -
Arsort()
和strtotime()
进行多个日期的比较
本文将教你如何使用 5 种不同的技术在 PHP 中比较日期。在这些技术中,有 4 种将以一种或另一种形式使用内置的 PHP 函数,如 strtotime()
、time()
和 date()
。最后一种技术将使用 PHP DateTime
对象。
用 strtotime()
和 time()
比较日期
strtotime()
是 PHP 中内置的时间函数。它的主要用途是将一串人类可读的日期转换为相等的 UNIX 时间戳。它可以解析各种字符串并将它们转换为适当的时间戳。此类字符串的示例是 2 weeks ago
和 next 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()
函数比较给定日期,请执行以下操作。
- 将当前时间戳转换成你想要的格式
- 在适当的字符串中写下你想要比较的日期
- 在日期字符串和当前时间戳之间进行条件检查
<?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()
。
现在,你有两件事可以比较,它们是,
- 你想比较的时间
- 字符串
today
传递给另一个strtotime()
你可以使用严格比较来将日期与这些标准进行比较。你可以创建一个比较函数来检查以下内容。
- 今天的日期
- 过去的日期
- 未来的日期
以下将检查提供的日期字符串是否为当前日期:
<?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
具有以下优点:
- 可以处理更多的日期字符串
- 使用起来更容易
- 它提供了日期的直接比较
当你打算将日期与 DateTime
进行比较时,请执行以下操作。
- 将日期字符串解析为
DateTime
对象 - 将日期与小于 ( < )、大于 ( > ) 或等于 ( == ) 等运算符进行比较
<?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 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