2014-01-30 6 views
1

У меня есть две даты, и я хочу получить промежуток времени между ними.
Я стараюсь это:Как получить период времени между двумя датами

$created_dt="2014-01-30 09:27:02";  
$done_dt="2014-01-30 16:29:38"; 

$created_dt=strtotime($created_dt); //1391066822 
$done_dt=strtotime($done_dt); //1391092178 
$runing_time= $created_dt-$done_dt; //25356 
$runing_time= date('H:i',$runing_time); 
echo $runing_time; // "09:02" <----------??????? 

почему $ runing_time = 9:02 ???

Что хорошего в этом отношении?
благодаря

Часть 2
как я могу суммировать несколько $ интервалов вместе? и после этого получить их среднее?
Стараюсь:

$average_time; 
    foreach($tasks as $task) 
    { 

    $date1 = new DateTime($task['start']); 
    $date2 = new DateTime($task['end']); 
    $interval = $date1->diff($date2); 
    $runing_time=$interval->format("%h hours, %i minutes, %s seconds"); 
    $average_time+=$interval ; 
    } 
    $final_average_time=average_time/4; 

очевидно мой код не работал, потому что $ интервал является объектом.

+1

Пожалуйста, используйте функцию PHP date_diff() http://www.php.net/manual/en/datetime.diff. php – har2vey

+0

с какой базой данных вы работаете, mysql? – datelligence

+0

Потому что вы спрашиваете, в какой час и минуту это было в вашем часовом поясе по временной отметке unix '25356', которая имеет мало общего с разницей в секундах между временами. – Wrikken

ответ

0

Я знаю, вам лучше использовать DateTime(), но никто здесь не говорит о проблеме и почему вы получаете неправильный результат.

Его, потому что date() функции получить 2-й параметр, как штамп времени и возвращает дату: 1970-1-1 00:00:00 GMT+given time stamp, обратите внимание на GMT части. это означает, что если ваш часовой пояс +2, то echo date("Y-m-d H:i:s",0) возвращается 1970-1-1 2:00:00, не1970-1-1 00:00:00.

Таким образом, результат, который вы получаете, является 07:02 (реальным другой) +2 hours (часового пояса). если вы настаиваете на получение результата с помощью date(), вы должны изменить последние строки:

$runing_time= $done_dt - $created_dt - 2*3600; 
$runing_time= date('H:i',$runing_time); 
//returns 07:02 
+0

вопрос об обновлении :) – user2706762

+0

@ user2706762 1.it - ​​еще один вопрос, 2. вы не ответили ни на один из ответов –

3

Использовать DateTime() и DateInterval() на дату математики. Многое легче сделать.

$date1 = new DateTime("2014-01-30 09:27:02"); 
$date2 = new DateTime("2014-01-30 16:29:38"); 
$interval = $date1->diff($date2); 
echo $interval->format("%h hours, %i minutes, %s seconds"); 

See it in action

+0

вопрос об обновлении :) – user2706762

+1

@ user2706762 Это должен быть отдельный вопрос. –

1

Попробуйте использовать DateTime, метод diff возвращает разницу между двумя DateTime объектами

$createDate = DateTime::createFromFormat("Y-m-d H:i:s", $created_dt); 
$endDate = DateTime::createFromFormat("Y-m-d H:i:s", $done_dt); 
$interval = $createDate->diff($endDate2); 
echo $interval->format('%R%a days %H hours %i Minutes and %s Seconds'); 
+0

'createFromFormat()' не нужно, так как формат datetime MySQL легко анализируется 'DateTime()' –

+0

. Я очень ценю информацию @John Conde. –

+0

@ Джон Конде, если формат MYSQL datetime, избегая созданияFromFormat, будет быстрее? –

Смежные вопросы