PHP比较两个日期作为过期日期

时间:2019-05-18 01:04:15

标签: php date date-comparison

嗨,我正在尝试进行一些比较数据库中日期的检查,以检查我的许可证是否已过期。

我的日期以以下格式存储: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';
}

它仍然显示为过期。 看到数以百万计的有关检查过期日期的问题,请全部尝试。我一定做错了什么。

2 个答案:

答案 0 :(得分:2)

  1. 请勿将strtotime()用于日期数学。使用`DateTime(),它更适合于处理日期。
  2. 您的日期格式与strtotime()不兼容。假设使用m / d / Y格式,则假定您使用的是美国日期格式,并且18/05/2019之类的日期被评估为“ 2019年18月的第五天”。显然,这不是您的意思,因此您会得到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
}

答案 1 :(得分:-1)

$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