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';
}
结果还是过期了。
看到关于检查过期日期的数百万个问题,都试过了。我一定做错了什么。
- 不要将
strtotime()
用于日期计算。使用更适合处理日期的`DateTime()。
- 您的日期格式与
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";
您好,我正在尝试制作一些东西来比较我数据库中的日期,以检查我的许可证是否已过期。
我的日期以这种格式存储: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';
}
结果还是过期了。 看到关于检查过期日期的数百万个问题,都试过了。我一定做错了什么。
- 不要将
strtotime()
用于日期计算。使用更适合处理日期的`DateTime()。 - 您的日期格式与
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";