8722 sujets

Développement web côté serveur, CMS

Bonjour,

j'essaie de trouver le nombre de jour entre deux date mais ca me donne un chiffre négatif, ce qui ai pas logique.


function date_diffd($date1, $date2)  
{
  $date1 = strtotime($date1);
  $date2 = strtotime($date2);
  $nbJoursTimestamp = $date2 - $date1;
 
 $nbJours = $nbJoursTimestamp/86400; // 86 400 = 60*60*24
 
  return $nbJours;
} 


et j'appel la fonction en mettant ces date la:
$nbj = date_diffd("2013-12-03", "2050-01-01"); 


le resultat est négatif !!!! ce me donne -16041
savez vous pourquoi? Smiley eek
merci pour vos réponse
Modifié par timo (03 Dec 2013 - 15:55)
idée comme ça : parce qu'il manque un $ à la première ligne de ta fonction ? (pas certaine, mais ça me semble une piste)
Modérateur
ça fonctionne bien pourtant, sur un système 64 bits. Sur un système 32 bits par contre, strtotime("2050-01-01") dépasse la limite (2038-01-19 03:14:07) et part probablement en négatif.

Essaie de travailler plus proprement avec des objets DateTime:


function date_diffd($date1, $date2)  
{
  $date1 = new DateTime($date1);
  $date2 = new DateTime($date2);
  
  $diff = $date1->diff($date2, TRUE);
  
  return $diff->format('%a');
}
Parce que la date maximale pour un timestamp sur un système 32bit est le 19/01/2038. Donc quand tu fais strtotime("2050-01-01") tu as un dépassement et tu te retrouves avec "false" comme valeur.

Faut utiliser des date/datetime et pas des timestamps.

Edit : grillé Smiley langue
Modifié par jb_gfx (03 Dec 2013 - 14:00)
Merci pour vos réponse

je comprend mieux maintenant, et je dormirais moins bête ce soir.
merci à vous Smiley lol