检查new DateTime在php中是今天还是将来


check if new DateTime is today or future in php

我需要检查date1是今天还是将来的日期,如果是,那就可以了如果不是(是过去的事),那就不好了。我看到了很多例子,但没有一个主题是检查date1今天是否相等。我的代码是:

$today = new DateTime(); // Today
$today->format('Y-m-d'); //2016-10-27
$contractDateBegin = new DateTime($date1); //2016-10-27
if($today->getTimestamp() <= $contractDateBegin->getTimestamp()){
   echo 'OK';
}
else{
   echo "NOT OK";
}

如果date1是将来的日期,则正常工作,但如果是相同的日期,则回显"NOT OK"

帮忙吗?

$today可以定义为new DateTime("today"),这意味着今天午夜-时间部分将自动归零

$today = new DateTime("today"); 
$date1 = '2016-10-27';
$contractDateBegin = new DateTime($date1); //2016-10-27
if($today <= $contractDateBegin){
    echo 'OK';
}
else{
    echo "NOT OK";
}

"Y-m-d格式"对于字符串的直接字典顺序比较也是完美的,并且不需要将其转换为DateTime对象。在PHP7中,您可以使用著名的specship操作符;)

php -a
Interactive mode enabled
php > $today = '2016-10-27';
php > $tomorrow = '2016-10-28';
php > $today2 = '2016-10-27';
php > echo $today <=> $tomorrow;
-1
php > echo $today <=> $today2;
0
php > echo $tomorrow <=> $today2;
1

getTimestamp()包含"H:i:s"。所以比较秒的时候会失败。在您的情况下,您是否只想比较日期('Y-m-d')?如果你只是想使用DateTime和比较Timestamp。请尝试

$today = new DateTime(); // Today
$contractDateBegin = new DateTime($date1); //2016-10-27
// Set time to 0
$today->setTime(0, 0, 0);
$contractDateBegin->setTime(0, 0, 0);
if($today->getTimestamp() <= $contractDateBegin->getTimestamp()){
   echo 'OK';
}
else{
   echo "NOT OK";
}

我猜你只想比较日期(忽略时间)。这应该可以工作:

$today = new DateTime();
$today = $today->format('Y-m-d');
$contractDateBegin = new DateTime($date1);
$contractDateBegin = $contractDateBegin->format('Y-m-d');
if ($today <= $contractDateBegin){
    echo 'OK';
} else {
   echo "NOT OK";
}