2016-06-15 3 views
0

Я пытаюсь получить разницу между двумя объектами DateTime в PHP, и ответ кажется неправильным. Как вы можете видеть, функция diff() дает разницу во времени 4 часа и 41 минуту, но разница во времени явно намного ближе к 7 часам.PHP datetime diff wrong

$eastern_tz = new DateTimeZone("US/Eastern"); 

$now   = new DateTime("now", $eastern_tz); 
$future_date = new DateTime($future_date_string); //'2011-05-11 12:00:00' 

$future_date->setTimezone($eastern_tz); 

$interval = $future_date->diff($now); 

var_dump($now); 
var_dump($future_date); 
var_dump($interval); 

return $interval->format($format); //"%d days, %h hours, %i minutes, %s seconds" 

// DEBUG информация

object(DateTime)[483] 
    public 'date' => string '2016-06-15 09:18:41' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'US/Eastern' (length=10) 
object(DateTime)[484] 
    public 'date' => string '2016-06-15 14:00:00' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'US/Eastern' (length=10) 
object(DateInterval)[479] 
    public 'y' => int 0 
    public 'm' => int 0 
    public 'd' => int 0 
    public 'h' => int 4 
    public 'i' => int 41 
    public 's' => int 19 
    public 'weekday' => int 0 
    public 'weekday_behavior' => int 0 
    public 'first_last_day_of' => int 0 
    public 'invert' => int 1 
    public 'days' => int 0 
    public 'special_type' => int 0 
    public 'special_amount' => int 0 
    public 'have_weekday_relative' => int 0 
    public 'have_special_relative' => int 0 
+0

ну, ваша информация DEBUG показывает, что значение $ future_date не является значением, которое вы утверждаете в качестве вставки. Вы уверены, что значение, которое вы предоставляете в $ future_date_string, является правильным? – Tularis

+0

В соответствии с значениями, указанными в информации об отладке, ответ правильный! –

ответ

1

При создании $future_date = new DateTime($future_date_string);, который является PHP по умолчанию пояс Часовой пояс?

$future_date->setTimezone($eastern_tz); необходим, только если вы визуализируете дату или импортируете новую строку. Слишком поздно для синтаксического анализа $future_date_string.

0

использовать мой код будет работать для вас.

$fromTimes = date('d-m-Y',strtotime('15-06-2016 06:57:27')); //from date and time 
$toTimess = date('d-m-Y',strtotime('17-06-2016 10:25:30')); //to date and time 
$date_a = new DateTime($toTimess); //converting the date and time 
$date_b = new DateTime($fromTimes); 
$interval = date_diff($date_a,$date_b); //find difference 
$day = $interval->format('%d')*24; //get day difference 
$hours = $interval->format('%h'); // get hour 
$mins = $interval->format('%i'); //get mins 
if($mins <10) 
{ $mins = '0'.$mins; } 
echo $total_hours = ($hours + $day).':'.$mins; 

надеюсь, что он будет работать для вас ...