Nombre de jour entre 2 dates

Mammouth du PHP | 620 Messages

04 nov. 2011, 13:23

Bonjour,
pour compté le nombre de jours entre 2 date j'utilise le code suivant :
function NbJours($debut, $fin) {

  $tDeb = explode("-", $debut);
  $tFin = explode("-", $fin);

  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
  
  return(($diff / 86400)+1);

}

	$date1 = $result['datedemande'];
	$date2 = date("Y-m-d H:i:s", time());

// j'appel la fonction
$Nombres_jours =  NbJours($date1, $date2);
// j'affiche le resultat
echo ' soit : '.$Nombres_jours. ' jours';

mon soucis est que sa fonctionnait bien il y a encore quelque semaine j'avais bien un résultat correct mais depuis une mise a jour de l’hébergeur (je ne saurait dire quoi) au lieu d'avoir un resultat rond comme 3 jours j'ai des résultats à virgules !

Savez vous comment je pourrait faire pour retrouver un bon résultat ?

ViPHP
ViPHP | 5462 Messages

04 nov. 2011, 13:27

utilise date_diff

ViPHP
ViPHP | 2291 Messages

04 nov. 2011, 15:22

Ou DATEDIFF pour le faire directement via MySQL
SELECT DATEDIFF('2011-11-04' , '2011-11-02');
//Affichera 2
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 19672 Messages

04 nov. 2011, 16:02

Il y en a qui n'ont pas les yeux en face des trous ... :roll:

Fabrice, observe bien ce que tu envoies à ta fonction : le premier paramètre devrait être correct si la colonne dans la table de ta base de données est au format DATE. Par contre le second paramètre est au format DATETIME. DOnc ta fonction reçoit par exemple '2011-11-01' et '2011-11-04 14:35:10'.

Que se passe-t-il dans ta fonction ? Un appel à explode récupère les éléments séparés par un tiret : pour l'année et le mois, pas de soucis, mais pour le jour, il aboutit à « 04 14:35:10 » au lieu de simplement « 04 », et donc c'est comme si tu faisais ensuite un maketime comme ceci :
mktime(0, 0, 0, 11, 04 14:35:10, 2011)
Le quatrième paramètre est-il correct à ton avis ?

CQFD... :-*
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

04 nov. 2011, 16:22

Peut-être que certains sont bigleux, mais les deux solutions poster reste meilleur que le script d'origine \:D/
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 256 Messages

04 nov. 2011, 16:38

Bonjour,

J'arrive après la bataille, mais j'ajoute mon grain de sel, puisque je passe par ici. Je ne crois pas que Php sache encore calculer les dates antérieures à 1970, mais la classe Date de Pear le fait très bien... à condition de ne pas calculer un écart de plus de 67 ans, avec une syntaxe comme...
$span = new Date_Span();
$span->setFromDateDiff($Day_end, $Day_start);
Cordialement,

Gaspard

Mammouth du PHP | 568 Messages

04 nov. 2011, 16:51

Et si tu es php >= 5.3

Il y a la classe DateTime et surtout DateInterval