Конвертировать даты в часы

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

У меня две разные даты, и я хотел бы видеть разницу в часах и днях с ними, я нашел слишком много примеров, но не то, что я хочу:

<?php $now_date = strtotime (date ('Ymd H:i:s')); // the current date $key_date = strtotime (date ("2009-11-21 14:08:42")); print date ($now_date - $key_date); // it returns an integer like 5813, 5814, 5815, etc... (I presume they are seconds) ?> 

Как я могу конвертировать его в часы или дни?

Ну, вы всегда можете использовать date_diff, но это только для PHP 5.3.0+

Альтернативой будет математика.

Как я могу конвертировать его [секунды] в часы или в дни?

Есть 60 секунд в минуту, а это значит, что 3600 секунд в час.

 $hours = $seconds/3600; 

И, конечно, если вам нужны дни …

 $days = $hours/24; 

Функция DateTime diff возвращает объект DateInterval . Этот объект состоит из переменных, связанных с разностью. Вы можете запрашивать дни, часы, минуты, секунды, как в приведенном выше примере.

Пример:

 <?php $dateObject = new DateTime(); // No arguments means 'now' $otherDateObject = new DateTime('2008-08-14 03:14:15'); $diffObject = $dateObject->diff($otherDateObject)); echo "Days of difference: ". $diffObject->days; ?> 

См. Руководство по DateTime .

К сожалению, это только функция PHP 5.3>.

Если у вас нет PHP5.3, вы можете использовать этот метод из userland ( взятый из WebDeveloper.com )

 function date_time_diff($start, $end, $date_only = true) // $start and $end as timestamps { if ($start < $end) { list($end, $start) = array($start, $end); } $result = array('years' => 0, 'months' => 0, 'days' => 0); if (!$date_only) { $result = array_merge($result, array('hours' => 0, 'minutes' => 0, 'seconds' => 0)); } foreach ($result as $period => $value) { while (($start = strtotime('-1 ' . $period, $start)) >= $end) { $result[$period]++; } $start = strtotime('+1 ' . $period, $start); } return $result; } $date_1 = strtotime('2005-07-31'); $date_2 = time(); $diff = date_time_diff($date_1, $date_2); foreach ($diff as $key => $val) { echo $val . ' ' . $key . ' '; } // Displays: // 3 years 4 months 11 days 

TheGrandWazoo упомянул метод для php 5.3>. Для более низких версий вы можете разделить количество секунд между двумя датами с количеством секунд в день, чтобы найти количество дней.

В течение нескольких дней вы делаете:

 $days = floor(($now_date - $key_date) / (60 * 60 * 24)) 

Если вы хотите узнать, сколько часов осталось, вы можете использовать оператор modulo (%)

 $hours = floor((($now_date - $key_date) % * (60 * 60 * 24)) / 60 * 60) 
 <?php $now_date = strtotime (date ('Ymd H:i:s')); // the current date $key_date = strtotime (date ("2009-11-21 14:08:42")); $diff = $now_date - $key_date; $days = floor($diff/(60*60*24)); $hours = floor(($diff-($days*60*60*24))/(60*60)); print $days." ".$hours." difference"; ?> 

Я предпочитаю использовать временные дельта эпох / unix. Время, представленное в секундах, и поэтому вы можете очень быстро делить на 3600 часов и делиться на 24 * 3600 = 86400 в течение нескольких дней.