Как получить разницу во времени между временем начала и окончания, имеющим переход от PM к AM? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть код ниже для вычисления разницы во времени, но когда я запускаю код, он печатает 0 разницы. Пожалуйста, смотрите в мой код ниже.

Я хочу получить разницу во времени между временным интервалом, который имеет переход времени от PM (сегодня) к AM (следующий день).

//echo 'Hello World!';

//echo mktime('11','30','0','1','2019','1');
//echo mktime('12','30','0','1','2019','1');

//echo ("  hello ");
//echo date(time());
//echo (" hello ");
//echo date('Y-m-d H:i:s A');

$date = "2019-10-16";
$stime = "11:30:00 PM";
$etime = "12:30:00 AM";

if("PM" == date('A', strtotime($stime)) && "AM" == date('A', strtotime($etime)))
{
  //echo " Time transition ";

  //get the start date and start time merging format
  $sdatetime = date('Y-m-d H:i:s A', strtotime("$date $stime"));

  //convert the start datetime into epoch
  $startepoch = strtotime($sdatetime);

  //increment the date to get the next day date  
  $edate = date('Y-m-d', strtotime($date. ' + 1 day'));

  //get the end date and end time merged
  $edatetime = date('Y-m-d H:i:s A', strtotime("$edate $etime"));

  //convert the end datetime into epoch
  $endepoch = strtotime($edatetime);

  $timediff = ($endepoch-$startepoch)/3600.0;

  echo " Time Difference: ".$timediff;


}else{

  echo "No time transition";

}



// 24 hour format
//$time = "00:00:00";

//echo date('A', strtotime($time));

1 Ответ

0 голосов
/ 16 октября 2019

PHP datetime и strtotime могут анализировать время с AM и PM. Объекты DateTime также можно сравнивать напрямую. Если время окончания меньше времени начала, оно считается временем окончания следующего дня. Это лучше, чем выбирать между AM и PM.

$date = "2019-10-16";
$stime = "11:30:00 PM";
$etime = "12:30:00 AM";

$dtStime = date_create($date." ".$stime);
$dtEtime = date_create($date." ".$etime);
if($dtEtime < $dtStime){
  $dtEtime->modify('+1 Day');
}
$diff = $dtStime->diff($dtEtime);
$seconds = $diff->h *3600 + $diff->i * 60 + $diff->s;

echo "Diff: ".$seconds." Seconds";

возвращает

Diff: 3600 Seconds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...