Question

Je suis en train de travailler avec des dates pour la première fois, je l'ai fait quelque chose à ce sujet avec Flash, mais il est différent.

J'ai deux dates différentes et je voudrais voir la différence dans les heures et les jours avec eux, je l'ai trouvé trop d'exemples, mais pas ce que je suis loking pour:

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

Comment puis-je convertir en heures ou jours?

Était-ce utile?

La solution

Eh bien, vous pouvez toujours utiliser date_diff, mais qui est seulement pour PHP 5.3.0 +

L'alternative serait mathématiques.

  

Comment puis-je convertir [secondes] à des heures ou jours?

Il y a 60 secondes par minute, ce qui signifie qu'il ya 3600 secondes par heure.

$hours = $seconds/3600;

Et, bien sûr, si vous avez besoin jours ...

$days = $hours/24;

Autres conseils

La fonction DateTime diff renvoie un objet DateInterval. Cet objet se compose de variabeles liés à la différence. Vous pouvez interroger les jours, heures, minutes, secondes comme dans l'exemple ci-dessus.

Exemple:

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

Consultez le manuel sur le DateTime .

Malheureusement, il est un PHP 5.3> seule caractéristique.

Si vous n'avez pas PHP5.3 vous pouvez utiliser cette méthode de userland ( prise 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 mentionné un procédé pour php 5.3>. Pour les versions inférieures, vous pouvez Devide le nombre de secondes entre les deux dates avec le nombre de secondes par jour pour trouver le nombre de jours.

Pour les jours, vous faites:

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

Si vous voulez savoir combien d'heures sont toujours à gauche, vous pouvez utiliser l'opérateur modulo (%)

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

Je préfère utiliser deltas temps Epoch / unix. Le temps représenté en quelques secondes et en tant que tel, vous pouvez très rapidement diviser par 3600 pendant des heures et diviser par 24 * 3600 = 86400 pendant des jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top