函数比较php中的日期';行不通

函数比较php中的日期';行不通,php,Php,我构建了这个函数,用来比较日期并返回一个布尔值。 但当我运行它时,它会断开,页面停止 职能: public function compare_date_outlook($creation, $modification) { $creation_date = DateTime::createFromFormat('Y-m-d\TH:i:s+', $creation); $creation_date = $creation_date->format( 'Y-

我构建了这个函数,用来比较日期并返回一个布尔值。 但当我运行它时,它会断开,页面停止

职能:

 public function compare_date_outlook($creation, $modification) {
        $creation_date =  DateTime::createFromFormat('Y-m-d\TH:i:s+', $creation);
        $creation_date = $creation_date->format( 'Y-m-d');
        $modification_date =  DateTime::createFromFormat('Y-m-d\TH:i:s+', $modification);
        $modification_date = $modification_date->format( 'Y-m-d');   
        $date = new \DateTime( 'yesterday' );
        $date->setTime( 0, 0, 0 );
        $yesterday = $date->format( 'Y-m-d');

           if (($creation || $modification) == $yesterday)
           {
               return TRUE;
           }

           else {
               return FALSE;
           }
        }
我如何称呼它:

if ( compare_date_outlook($a['creationDate'], $a['lastModifiedDate']) === TRUE)
日期的格式:

 $a['creationDate'] = "2017-09-08T13:26:11.4354775Z";
它从一开始就停止了:

$creation_date =  DateTime::createFromFormat('Y-m-d\TH:i:s+', $creation);

像这样的方法应该会奏效:

function compare_date_outlook($creation, $modification)
{
    $today = (new \Datetime())->setTime(0, 0, 0);
    $yesterday = (new \Datetime('yesterday'))->setTime(0, 0, 0);

    $creation_date = \DateTime::createFromFormat('Y-m-d\TH:i:s+', $creation);
    $modification_date = \DateTime::createFromFormat('Y-m-d\TH:i:s+', $modification);

    return ($creation_date >= $yesterday && $creation_date < $today) ||
        ($modification_date >= $yesterday && $modification_date < $today);
}
函数比较\u日期\u outlook($creation,$modification)
{
$today=(new\Datetime())->setTime(0,0,0);
$dayerd=(new\Datetime('dayerd'))->setTime(0,0,0);
$creation\u date=\DateTime::createFromFormat('Y-m-d\TH:i:s+',$creation);
$modification_date=\DateTime::createFromFormat('Y-m-d\TH:i:s+',$modify);
返回($creation\u date>=$Dayed&$creation\u date<$Dayed)||
($modification_date>=$forday&$modification_date<$today);
}

类似的方法应该可以:

function compare_date_outlook($creation, $modification)
{
    $today = (new \Datetime())->setTime(0, 0, 0);
    $yesterday = (new \Datetime('yesterday'))->setTime(0, 0, 0);

    $creation_date = \DateTime::createFromFormat('Y-m-d\TH:i:s+', $creation);
    $modification_date = \DateTime::createFromFormat('Y-m-d\TH:i:s+', $modification);

    return ($creation_date >= $yesterday && $creation_date < $today) ||
        ($modification_date >= $yesterday && $modification_date < $today);
}
函数比较\u日期\u outlook($creation,$modification)
{
$today=(new\Datetime())->setTime(0,0,0);
$dayerd=(new\Datetime('dayerd'))->setTime(0,0,0);
$creation\u date=\DateTime::createFromFormat('Y-m-d\TH:i:s+',$creation);
$modification_date=\DateTime::createFromFormat('Y-m-d\TH:i:s+',$modify);
返回($creation\u date>=$Dayed&$creation\u date<$Dayed)||
($modification_date>=$forday&$modification_date<$today);
}

您可能有其他名称空间。因此,当您在不同的命名空间中时,需要在全局方法/类之前添加
\

见这里的医生


可能您有其他名称空间。因此,当您在不同的命名空间中时,需要在全局方法/类之前添加
\

见这里的医生


既然它是一个公共函数,如果(($creation | | | |$modification)==$forday),您不应该将它称为$this->
<代码>如果($creation==$beday | |$modification==$beday)
…但不要比较格式化的字符串…比较DateTime对象本身…它们是故意直接写入的comparable@Akintunde您认为$this将引用到哪里?这与函数本身无关。@TMA您在脚本停止时有任何错误吗?如果有,请附加。@MarkBaker这是一个改进t、 谢谢,问题是,当我调试时,我进入函数内部,它只是在第一行停止,因为它是一个公共函数,你不应该将它称为$this->
if(($creation | | | modification)==$beday)
if($creation=$beday | | modification=$beday)
…但不要比较格式化的字符串…比较DateTime对象本身…它们是故意直接写入的comparable@Akintunde您认为$this将引用到哪里?这与函数本身无关。@TMA您在脚本停止时有任何错误吗?如果有,请附加。@MarkBaker这是一个改进t、 谢谢,问题是,当我调试时,我进入函数内部,它只在第一行停止。你可以将格式掩码简化为
'Y-m-d |+'
强制时间部分为
00:00:00
,这有时是一个有用的方法trick@MarkBaker为此干杯!绝对是一个方便的了解:)您可以将格式掩码简化为
'Y-m-d |+'
以强制时间部分为
00:00:00
,这有时是一个有用的方法trick@MarkBaker为此干杯!绝对是一个方便的了解:)