305 votes

Comment obtenir le décalage horaire en minutes en PHP

Comment calculer la différence en minutes entre deux dates-heure en PHP ?

446voto

mike Points 909

Les réponses ci-dessus concernent les anciennes versions de PHP. Utilisez la classe DateTime pour effectuer des calculs de date, maintenant que PHP 5.3 est la norme. Par exemple, la classe DateTime est utilisée pour les calculs de date.

$start_date = new DateTime('2007-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';

$since_start est un DateInterval objet. Notez que la propriété days est disponible (car nous avons utilisé la méthode diff de la classe DateTime pour générer l'objet DateInterval).

Le code ci-dessus produira un résultat :

1837 jours au total
5 ans
0 mois
10 jours
6 heures
14 minutes
2 secondes

Pour obtenir le nombre total de minutes :

$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';

Cela produira un résultat :

2645654 minutes

Qui est le nombre réel de minutes qui se sont écoulées entre les deux dates. La classe DateTime tient compte de l'heure d'été (en fonction du fuseau horaire), ce qui n'est pas le cas de "l'ancienne méthode". Lire le manuel sur la date et l'heure http://www.php.net/manual/en/book.datetime.php

13 votes

Dommage que DateInterval n'ait pas de méthode comme inSeconds() ou quelque chose de similaire, maintenant c'est la répétition du code partout où j'ai besoin de calculer la différence en secondes.

5 votes

@barius Vous pouvez également écrire une fonction qui englobe le code répétitif, ou même étendre DateTime et ne pas répéter votre code.

19 votes

+1 pour la seule réponse correcte au moment de la rédaction de ce commentaire.

358voto

user38526 Points 1237

Voici la réponse :

$to_time = strtotime("2008-12-13 10:42:00");
$from_time = strtotime("2008-12-13 10:21:00");
echo round(abs($to_time - $from_time) / 60,2). " minute";

5 votes

La fonction abs() n'est pas nécessaire si l'on souhaite également vérifier le temps négatif !

38 votes

Pour ceux qui se posent la question, la / 60,2 signifie : diviser par soixante, arrondir aux deux décimales les plus proches.

3 votes

Strtotime n'est pas fiable, à éviter. Il ne fonctionne que pour des formats de date spécifiques, principalement liés aux États-Unis.

105voto

Oli Points 65050

Soustrayez la valeur la plus élevée du passé de la valeur la plus élevée du futur et divisez par 60.

Les temps sont calculés au format Unix, c'est-à-dire qu'il s'agit simplement d'un grand nombre indiquant le nombre de secondes écoulées entre le moment où le temps a été calculé et le moment où il a été calculé. January 1, 1970, 00:00:00 GMT

2 votes

@Jerald Comment cette solution fonctionne-t-elle pour vous ? Pouvez-vous nous en dire un peu plus à ce sujet ? Merci de votre compréhension.

11 votes

@WafieAli $nInterval = strtotime($sDate2) - strtotime($sDate1) ; cela renvoie la différence de temps en secondes, puis vous pouvez simplement diviser par 60 comme ceci. $nInterval = $nInterval/60 ;

0 votes

+1 pour expliquer ce qu'il faut faire et ne pas utiliser la classe DateInterval qui n'a pas de méthode pour faire cela : return difference en minutes .

36voto

Tom Points 2835
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>

0 votes

Pouvez-vous expliquer pourquoi vous avez besoin de sleep pour calculer une différence de date ?

4 votes

Quoi de mieux qu'un sommeil rapide pour utiliser son temps en attendant une autre période de comparaison. Bien que cela devrait en théorie vous donner une réponse de 2, ce qui pourrait aider les personnes qui essaient de comprendre la formule, en confirmant qu'elle est correcte.

16voto

Naeem Points 1023

D'une autre manière avec le fuseau horaire.

$start_date = new DateTime("2013-12-24 06:00:00",new DateTimeZone('Pacific/Nauru'));
$end_date = new DateTime("2013-12-24 06:45:00", new DateTimeZone('Pacific/Nauru'));
$interval = $start_date->diff($end_date);
$hours   = $interval->format('%h'); 
$minutes = $interval->format('%i');
echo  'Diff. in minutes is: '.($hours * 60 + $minutes);

4 votes

Si vous voulez aussi des jours, vous devez ajouter $days = $interval->format('%d'); et la différence est ($days * 1440 + $hours * 60 + $minutes) . Depuis des mois, des années => même logique

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