0 votes

Convertir les dates en heures

J'essaie de travailler avec des dates pour la première fois, j'ai fait quelque chose de ce genre avec Flash mais c'est différent.

J'ai deux dates différentes et j'aimerais voir la différence en heures et jours avec elles, j'ai trouvé trop d'exemples mais pas ce que je cherche :

<?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 le convertir en heures ou en jours ?

5voto

TheGrandWazoo Points 1744

La fonction diff 'DateTime' renvoie un objet DateInterval. Cet objet est composé de variables liées à 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; 
?>

Voir le manuel à ce sujet : http://php.net/manual/en/datetime.diff.php . Malheureusement, c'est une fonctionnalité réservée à PHP 5.3>.

1voto

Matt Points 21690

Vous pouvez toujours utiliser date_diff, mais c'est seulement pour PHP 5.3.0+.

L'alternative serait les mathématiques.

Comment puis-je les convertir [secondes] en heures ou en jours ?

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

$hours = $seconds/3600;

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

$days = $hours/24;

1voto

Gordon Points 156415

Si vous n'avez pas PHP5.3, vous pouvez utiliser cette méthode depuis l'interface utilisateur ( extrait 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

0voto

Ikke Points 31517

TheGrandWazoo a mentionné une méthode pour php 5.3>. Pour les versions inférieures, vous pouvez diviser le nombre de secondes entre les deux dates par le nombre de secondes dans un jour pour trouver le nombre de jours.

Pendant des jours, tu le fais :

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

Si vous voulez savoir combien d'heures il reste, vous pouvez utiliser l'opérateur modulo (%).

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

0voto

jitter Points 35805
<?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";
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X