2009-11-22 5 views
0

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

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

<?php 
    $now_date = strtotime (date ('Y-m-d 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) 
?> 

Как можно Я конвертирую его в часы или дни?

ответ

1

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

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

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

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

$hours = $seconds/3600; 

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

$days = $hours/24; 
+0

простой и функциональный! благодаря – vitto

5

Функция 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>.

+0

большого предложения, к сожалению, у меня есть версия 5.22, но я буду использовать его в следующий раз, когда я могу. – vitto

+1

Хороший ответ, одна вещь, в вашем примере, у вас есть дополнительная фигурная скобка на 4-й строке. Итак ... '$ diffObject = $ dateObject-> diff ($ otherDateObject));' должно быть ... '$ diffObject = $ dateObject-> diff ($ otherDateObject);' – AndyGaskell

0

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

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

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

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

$hours = floor((($now_date - $key_date) % * (60 * 60 * 24))/60 * 60) 
0
<?php 
    $now_date = strtotime (date ('Y-m-d 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"; 
?> 
0

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

1

Если вы не имеют PHP5.3 вы могли бы использовать этот метод из пользовательского уровня (taken from 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