разность php: datetime () между 2 датами с двумя переменными

У меня в моей базе данных четыре столбца:

Date_in | Time_in | Date_out | Time_out 

Date_in и Time_in принадлежат друг другу (например, 2013-02-18 13:00:00), а date_out – Time_out. Я хотел бы узнать разницу между тем, и я получил до:

 $start_time = new DateTime("'$list[date_in] "."$list[time_in]'"); $since_start = $start_time->diff(new DateTime("'$list[date_out] "."$list[time_out]'")); $hours = $since_start->h.' hours'; 

Но это не сработает. Я думаю, что мои цитаты и двойные кавычки все испорчены, потому что использование «.» Действительно меня смущает ..

Заранее благодарим за любые советы о том, как я могу исправить свой код!

[EDIT] Спасибо всем за вашу подробную помощь! Я просто понял, что сервер не поддерживает php 5.3, и я не могу использовать datetime ().

Поэтому я решил:

 $start_time = strtotime("$list[date_in] " . "$list[time_in]"); $end_time = strtotime("$list[date_out] " . "$list[time_out]"); $hours = abs(($end_time - $start_time)/3600); 

Попробуй это,

 function datediff( $date1, $date2 ) { $diff = abs( strtotime( $date1 ) - strtotime( $date2 ) ); return sprintf ( "%d Days, %d Hours, %d Mins, %d Seconds", intval( $diff / 86400 ), intval( ( $diff % 86400 ) / 3600), intval( ( $diff / 60 ) % 60 ), intval( $diff % 60 ) ); } print datediff( "18th February 2013", "now" ) . "\n"; 

ИЛИ

Вы можете использовать DateTime :: diff

  $start_date = new DateTime("2012-02-10 11:26:00"); $end_date = new DateTime("2012-04-25 01:50:00"); $interval = $start_date->diff($end_date); echo "Result " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

РЕДАКТИРОВАТЬ:

Оформить заказ,

Как рассчитать разницу между двумя датами с помощью PHP?

Php Date Time – 7 методов для вычисления разницы между двумя датами.

может помочь вам.

Вам не нужны кавычки, если вы хотите оценить содержимое переменных. В этом случае вам нужны только их для разделения между датой и временем:

 $start_time = new DateTime($list['date_in']." ".$list['time_in']); $since_start = $start_time->diff(new DateTime($list['date_out']." ".$list['time_out'])); 

Я использую точку . чтобы объединить переменные со строкой, в этом случае строка представляет собой пробел.

Вы можете больше узнать о конкатенации в документации .

 $start_time = new DateTime("$list[date_in] " . "$list[time_in]"); $since_start = $start_time->diff(new DateTime("$list[date_out] " . "$list[time_out]")); 

ИЛИ

 $start_time = new DateTime("{$list['date_in']} {$list['time_in']}"); $since_start = $start_time->diff(new DateTime("{$list['date_out']} {$list['time_out']}")); 
 // Time format is UNIX timestamp or // PHP strtotime compatible strings function dateDiff($time1, $time2, $precision = 6) { // If not numeric then convert texts to unix timestamps if (!is_int($time1)) { $time1 = strtotime($time1); } if (!is_int($time2)) { $time2 = strtotime($time2); } // If time1 is bigger than time2 // Then swap time1 and time2 if ($time1 > $time2) { $ttime = $time1; $time1 = $time2; $time2 = $ttime; } // Set up intervals and diffs arrays $intervals = array('year','month','day','hour','minute','second'); $diffs = array(); // Loop thru all intervals foreach ($intervals as $interval) { // Set default diff to 0 $diffs[$interval] = 0; // Create temp time from time1 and interval $ttime = strtotime("+1 " . $interval, $time1); // Loop until temp time is smaller than time2 while ($time2 >= $ttime) { $time1 = $ttime; $diffs[$interval]++; // Create new temp time from time1 and interval $ttime = strtotime("+1 " . $interval, $time1); } } $count = 0; $times = array(); // Loop thru all diffs foreach ($diffs as $interval => $value) { // Break if we have needed precission if ($count >= $precision) { break; } // Add value and interval // if value is bigger than 0 if ($value > 0) { // Add s if value is not 1 if ($value != 1) { $interval .= "s"; } // Add value and interval to times array $times[] = $value . " " . $interval; $count++; } } // Return string with times return implode(", ", $times); } // Set start & end time $start_time = "2013-02-18 13:00:00"; $end_time = "2013-02-16 10:00:00"; // Run and print diff echo dateDiff($start_time, $end_time, 6); 

Последним аргументом является точность.

 $diff = abs( strtotime( '2014-04-25 16:00:00' ) - strtotime( '2014-04-27 18:02:00' ) ); if(sprintf("%d",intval( $diff / 86400 )) != '0'){ if(sprintf("%d",intval( $diff / 86400 )) == '1'){ echo sprintf("%02d day ", intval( $diff / 86400 )); }else{ echo sprintf("%02d days ", intval( $diff / 86400 )); } } if(intval( ( $diff % 86400 ) / 3600) != '0'){ if(intval( ( $diff % 86400 ) / 3600) == '1'){ echo sprintf("%02d hour ", intval( ( $diff % 86400 ) / 3600)); }else{ echo sprintf("%02d hours ", intval( ( $diff % 86400 ) / 3600)); } } if(intval( ( $diff / 60 ) % 60 ) != '0'){ if(intval( ( $diff / 60 ) % 60 ) == '1'){ echo sprintf("%02d min", intval( ( $diff / 60 ) % 60 )); }else{ echo sprintf("%02d mins", intval( ( $diff / 60 ) % 60 )); } }