PHP check if two Datetimes are not on the same calendar day

后端 未结 3 838
庸人自扰
庸人自扰 2021-01-22 04:24

I have two Datetimes like this (the dates being actually $vars)

$startTime = \\DateTime::createFromFormat(\'Y/m/d H:i\', \'2015/01/01 23:00\');
$endTime = \\Date         


        
3条回答
  •  抹茶落季
    2021-01-22 05:09

    Just create the dates with time set to 00:00:00:

    $startTime = \DateTime::createFromFormat('Y/m/d H:i:s', '2015/01/01 00:00:00');
    $endTime = \DateTime::createFromFormat('Y/m/d H:i:s', '2015/01/02 00:00:00');
    

    or reset time to zero on existing dates:

    $startTime->setTime(0, 0, 0);
    $endTime->setTime(0, 0, 0);
    

    then it should work:

    $diff = $startTime->diff($endTime);
    $days = $diff->format('%d');
    
    echo $days; // 1
    

    Bonus

    If you want to work only with dates, remember to set the time to 00:00:00 in createFromFormat or reset it with setTime. If you won't provide time in createFromFormat PHP will set it to the current time:

    $date = DateTime::createFromFormat('Y-m-d', '2016-01-21');
    print $date->format('H:i:s'); //not 00:00:00
    

    To fix it, you must either:

    • provide 00:00:00 time in format:

      $date = DateTime::createFromFormat('Y-m-d H:i:s', '2016-01-21 00:00:00');

    • prefix the date format with exclamation mark and omit the time, this will set the time to 00:00:00 automatically:

      $date = DateTime::createFromFormat('!Y-m-d', '2016-01-21');

    • reset the time after creation:

      $date = DateTime::createFromFormat('Y-m-d', '2016-01-21'); $date->setTime(0, 0);

提交回复
热议问题