嗨,我正在尝试进行一些比较数据库中日期的检查,以检查我的许可证是否已过期。
我的日期以以下格式存储: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';
}
它仍然显示为过期。 看到数以百万计的有关检查过期日期的问题,请全部尝试。我一定做错了什么。
答案 0 :(得分:2)
strtotime()
用于日期数学。使用`DateTime(),它更适合于处理日期。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";