Pregunta

Estoy tratando de trabajo con fechas para la primera vez, lo hice algo al respecto con Flash, pero es diferente.

Tengo dos fechas diferentes y me gustaría ver la diferencia de horas y días con ellos, he encontrado muchos ejemplos, pero no lo que estoy buscando alojamiento para:

<?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) 
?>

¿Cómo puedo convertir a horas o días a?

¿Fue útil?

Solución

Bueno, siempre se puede utilizar date_diff, pero eso es sólo para PHP 5.3.0 +

La alternativa sería matemáticas.

  

¿Cómo puedo convertir lo [segundos] a horas o días a?

Hay 60 segundos por minuto, lo que significa que hay 3600 segundos por hora.

$hours = $seconds/3600;

Y, por supuesto, si necesita días ...

$days = $hours/24;

Otros consejos

La función DateTime diff devuelve un objeto DateInterval. Este objeto se compone de variabeles relacionados con la diferencia. Puede consultar los días, horas, minutos, segundos, al igual que en el ejemplo anterior.

Ejemplo:

<?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; 
?>

Consulte el manual sobre DateTime .

Lamentablemente, es un PHP 5.3> única característica.

Si usted no tiene PHP5.3 que podría utilizar este método de espacio de usuario ( tomado de 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 menciona un método para php 5.3>. Para las versiones más bajas puede dividiremos el número de segundos entre las dos fechas con el número de segundos en un día para encontrar el número de días.

Para los días, lo hace:

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

Si desea saber cuántas horas todavía quedan, puede utilizar el operador de módulo (%)

$hours = floor((($now_date - $key_date) % * (60 * 60 * 24)) / 60 * 60)
<?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";
?>

Yo prefiero usar época deltas de tiempo / Unix. Tiempo representado en segundos y, como tal, puede muy rápidamente dividir por 3600 durante horas y se divide por 24 * 3600 = 86400 durante días.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top