PHP 比较两个日期的过期日期

PHP comparing two dates for expire date

您好,我正在尝试制作一些东西来比较我数据库中的日期,以检查我的许可证是否已过期。

我的日期以这种格式存储:18/05/2019 (d/m/Y)

在我的代码中,我为今天的日期创建了一个变量:

$TodayDate = Date('d/m/Y');

然后我得到包含数据库中日期的行,如下所示:

$DBLicenseExpireDate  = $row["LicenseExpireDate"];

最后我尝试查看日期是否已过期:

 if ($TodayDate < $DBLicenseExpireDate) {
           }

我也试过:

 if ($TodayDate < strtotime($DBLicenseExpireDate)) {
           }

在几乎所有情况下,我都尝试过它说它已过期而实际上没有。

我得到了一些奇怪的结果。例子: 如果今天的日期是:05/18/2019 并且过期日期是:06/06/2019 我试试这个 if 语句:

if($todayDate < $expireDate)
{
  echo 'not expired';
}
else
{
echo 'expired';
}

结果还是过期了。 看到关于检查过期日期的数百万个问题,都试过了。我一定做错了什么。

  1. 不要将 strtotime() 用于日期计算。使用更适合处理日期的`DateTime()。
  2. 您的日期格式与 strtotime() 不兼容。当使用 m/d/Y 格式时,假定您使用的是美国日期格式,并且像 18/05/2019 这样的日期被评估为 "the fifth day of the 18th month of 2019"。显然这不是你的意思,结果你会得到 1970-01-01

使用DateTime::CreateFromFormat()获取您想要的日期,然后进行比较:

// Parse the european date format
$date1 = DateTime::CreateFromFormat('%d/%m/%Y', '18/05/2019');
// Get today ("now")
$date2 = new DateTime(); 
// DateTime objects are comparable so you can compare these two variables directly
if ($date2 < $date1) {
    // today is before the 18th of May
}
else {
    // today is after the 18th of May
}
$TodayDate = Date('d/m/Y');
echo '<br/>'.$TodayDate;

//$DBLicenseExpireDate  = $row["LicenseExpireDate"];
//Suppose $DBLicenseExpireDate is 17/05/2019
$DBLicenseExpireDate = '17/05/2019';
echo '<br/>'.$DBLicenseExpireDate;

$TodayDateDateTimeStamp = DateTime::createFromFormat('!d/m/Y', $TodayDate)->getTimestamp();
$DBLicenseExpireDateDateTimeStamp = DateTime::createFromFormat('!d/m/Y', $DBLicenseExpireDate)->getTimestamp();

echo '<br/>'.$TodayDateDateTimeStamp;
echo '<br/>'.$DBLicenseExpireDateDateTimeStamp;

if($TodayDateDateTimeStamp > $DBLicenseExpireDateDateTimeStamp)
    echo "<br/>License Expired";
else
    echo "<br/>Not Expired";

参考https://php.net/manual/en/function.strtotime.php