[PHP] Calcul du temps écoulé entre 2 dates [Résolu/Fermé]

Signaler
-
 haha -
Bonjour à tous,
Je voudrais savoir si quelqu'un peut m'aider à calculer le temps écoulé entre 2 dates, par exemple une date $date et le jour présent.

Je sais qu'il faut faire un timestamp pour les 2 dates après les convertir en secondes, les soustraires et les reconvertir en mois et années mais j'y arrive pas... quelqu'un peut me donner un exemple concrêt svp ? Merci !

19 réponses

Franchement je crois qu'il vaut mieux passer un peu de temps sur la doc PHP plutôt que se taper des lignes de code comme ça !

Il existe une méthode diff (de la classe DateTime) qui permet de calculer directement un intervalle. Après avec l'intervalle on peut récupérer ce qu'on veut : le nombre de jours, de secondes, etc.

Voilà un exemple d'utilisation avec des chaines du genre : '2009-06-08 20:30:00'


$d1 = new DateTime('2009-06-08 20:30:00');
$d2 = new DateTime('2009-06-10 20:30:00');
$diff = $d1->diff($d2);

$nb_jours = $diff->d;

Voilà j'espère que ça aura servit à quelqu'un ;)
80
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 75932 internautes nous ont dit merci ce mois-ci

bonsoir ,
comment récupérer la diff des mois et années
merci d'avance
Bidon cette fonction , change l'année dans ta première date genre 2008 et tu retrouvera toujours le même nombre de jours ...
print_r($diff)
LinKuFF
Messages postés
1
Date d'inscription
vendredi 7 décembre 2012
Statut
Membre
Dernière intervention
13 décembre 2013

Attention, pour avoir le nombre de jours réels, il ne faut pas utiliser "d" mais "days". "d" n'est à utiliser que si on utilise également "y", "m", etc... car il soustrait le nombre de mois et d'années.

Il ne faut donc pas utiliser :

$nb_jours = $diff->d;

mais :

$nb_jours = $diff->days;
différence entre 2 date en une seule ligne
$nbjours = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1);
voila !! pourquoi comliqué les chauses
Félicitations.

Je débute dans PHP et quand je vois des trucs avec des -> pour faire savant je m'énerve un peu alors qu'une simple ligne suffit.
'->' n'est pas compliqué, c'est juste une appel de méthode ou d'argument de classe et pour tout dire je trouve la méthode de BludWarf plus claire, plus adaptable et donc par conséquent meilleure !
JCV: je débute également en php, lorsque j'ai vu cette fonction, je n'ai pas tout compris, mais un peu de documentation, et le mystère c'est éclairci. Ce n'est pas pour se la raconter que l'on code comme ca !!
La "méthode" proposée par daldas date d'il y a 10 ans (pph4) et ne marche pas: Elle ne tiens pas compte des fuseaux horaires, ni des années bissextiles, ni des changements d'heures, etc... ça fait belle lurette qu'il ne faut plus travailler sur les timestamp (m'enfin il a voulu faire son intéressant avec une méthode en une ligne, sans la comprendre, dommage).

Par contre celle de Bludwarf est LA méthode à utiliser, qui marche dans toutes les conditions.
@Coyote_fou
Sa méthode est en effet la plus propre et la plus juste.
Mais il y a une condition dans laquelle est ne fonctionne pas: lorsque l'on travaille sur un serveur tournant sous une version de PHP plus ancienne que la 5.3.
Bien entendu, ce problème est d'autant plus important lorsque il nous est impossible de mettre à jour l'environnement.
Copiez puis coller cela dans un fichier PHP est voiyez le resultat :

<?php

$d1 = new DateTime('2011-06-08 19:30:00'); 
$d2 = new DateTime('2012-01-10 7:30:00'); 
$diff = $d1->diff($d2); 
$diffa = $d1->diff($d2); 
$diffm = $d1->diff($d2); 
$diffh = $d1->diff($d2); 
$diffi= $d1->diff($d2); 
$diffs = $d1->diff($d2); 


echo $nb_jours = $diff->d." Jours "; 
echo $nb_mois = $diffm->m." mois "; 
echo $nb_an = $diffa->y." ans "; 
echo "<br>";
echo $nb_heur = $diffh->h." Heurs "; 
echo $nb_min = $diffi->i." Minutes "; 
echo $nb_sec = $diffs->s." Seconde ";
 
?>
Je pense que tous voulaient calculer un écart sur leur site, et pas connaître une différence entre deux dates à un moment précis (sinon, pourquoi demander comment on le fait en PHP)

Je me suis posé la même question, et comme je répugne à faire du code de plusieurs kilomètres de long (qu'il faut charger et exécuter), j'ai cherché la solution la plus courte.

$datedepart = mktime (h,min,sec,mois,jour,annee); // chaque élément est rentrée en valeur numérique
$dateactuelle = time(); // on récupère la date du serveur
$difdate = ($dateactuelle-$datedepart)/(60*60*24) // l'écart est donné en secondes, on divise pour l'avoir en jour (en fait, on en fait ce qu'on veut ensuite.)

// 3 lignes seulement pour la clarté du texte, mais on peut tout mettre en une seule ligne, et ça marche correctement. Merci à ceux qui m'ont donné des pistes.
Simple et Efficace. L'efficience même.
vas sur ce site il marche bien:

http://www.ephemeride.com/calendrier/deux_dates/81/

Pour convertir une date du style : 26/01/2011 ou 26-01-2011 ou encore 2011-01-26 au format timestamps il suffit de faire : $date1 = strtotime("26-01-2011");
voir : http://www.php.net/manual/fr/function.strtotime.php

Voici maintenant une fonction de calcul entre 2 timestamps
// calcul temps entre 2 timestamps (date la + proche, date la + ancienne)
function diff_date($date1, $date2) {  
	$second = floor($date1 - $date2);
	if ($second == 0) return "0";

	return array("an"         => date('Y', $second)-1970, 
			  "mois"      => date('m', $second)-1,
			  "semaine" => floor((date('d', $second)-1)/7),
			  "jour"	 => (date('d', $second)-1)%7,
			  "heure"     => date('H', $second)-1, 
			  "minute"   => date('i', $second)-0, 
			  "seconde" => date('s', $second)-0
			 );
}


ce qui devrait donner par exemple :
// Les 2 dates
$date1 = strtotime("now"); // maintenant
$date2 = strtotime("26-01-2011");

// La fonction de calcul qui retourne un tableau
$tab = diff_date($date1, $date2);

// on passe en revue le tableau
$compteur = 0;
foreach ($tab as $key => $value) {
	if ($value > 0) {
		echo (($compteur) ? ', ' : '') . $value .' '. $key;
		if ($value > 1 && $key != "mois") echo  's';
		$compteur++;
	}
}
Attention, je crois que strtotime("04-05-2011") ne renvoie pas le timestamp du 4 mai 2011 mais celui du 5 avril 2011 !
A vérifier (pas de PC sous la main)
En résumé, on a désormais plusieurs possibilités.

Certaines ont été très commentées, notamment au vu de la longueur du code, et d'autres ont du passer complètement inaperçues (la mienne par exemple en 3 ligne qui donne une solution viable) puisque personne ne s'est permis de la commenter.

C'est là qu'on voit ceux qui programment depuis peu de temps avec des machines qui possèdent de la mémoire en pagaille et ou le temps machine ne représente rien, et des anciens comme moi qui cherchent toujours à utiliser la bonne fonction pour résoudre dans le moins de code possible un petit problème.

C'est vrai qu'il est loin le temps des machines dont la mémoire se chiffrait en Ko (kilo-octets pour ceux, trop jeunes ne connaissent plus cette unité) et dont la vitesse des processeurs se chiffrait en Mhz (Méga Herz) et ou la moindre économie de cycle et de place avait un intérêt crucial sur la vitesse d'un programme.
Certes, mais ton code n'est pas passé totalement inaperçu, il m'a été très utile !
Coder avec peu de ligne c'est plus propre, et c'est plus facile de s'y retrouver ensuite :)
Messages postés
437
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
15 décembre 2008
372
ATTENTION, la fonction mktime à un ordre de paramètre bien précis :
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )

donc au lieu de faire:
return mktime(0, 0, 0, $day, $month, $year);

tu dois faire :
return mktime(0, 0, 0, $month, $day, $year);


ensuite (en fait, avant) tu fait :
list($day, $month, $year) = sscanf($date,"%d/%d/%d");

mais les varaibles $day, $month, $year ne font pas défini. Donc elle sont uilisé seulement dans la fonction. Hors, tu veut les uilisé plus tard en faisant :
elapsed($day, $month, $year);

dans un contexte global, donc ces variables n'ont pas de valeur.
Messages postés
437
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
15 décembre 2008
372
Pour, qu'a l'interrieur d'une fonction, tu utilise les variable qui sont a l'exterieur de la fonction il faut uiliser le mot clé "global" :
function maFonction(){
  global $maVariable;

  $maVariable=5
}


$maVariable=2;
maFonction();
echo $maVariable; // Affiche 5
<?php

echo '<pre>';
$date1 = strtotime('20100301 01:37:01');
$date2 = strtotime('20100301 01:36:00');

echo 'Nombre de jours : '. (date('d',$date1 - $date2)-1)."\n";
echo 'Nombre de mois : '. (date('m',$date1 - $date2)-1)."\n";
echo 'Nombre de minutes : '. (date('i',$date1 - $date2)+0)."\n";


?>

et voilou.
s.spark
Messages postés
2502
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
556
Salut CedK,

Je ne pense pas que ton code fonctionne.

Sans essayer je dirais :

date() retourne une date, donc date('d',$date1 - $date2) retourne le jour de cette date auquel correspond le timestamp calculé, pas le nombre de jour en les deux.

Si on prend le timestamp actuel 1267452829 qu'on rajoute un jour 1267452829 + 86400

On fait la différence :

1267539229 - 1267452829 = 86400

Le timestamp 86400 correspond au 2 janvier 1970, 00:00:00

date('d', '86400') = 2
date('m', '86400') = 1 (janvier)
date('i', '86400') = 00
cedk
Messages postés
19
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
15 janvier 2014
60
oui, tu as raison, dsl :-(
par contre, j'aime bien la fonction strotime qui reconnaît de nombreux formats de dates
Amélioration de la fonction à CedK:

<?php
function temps_ecoule($date,$type) {
	if($type == "timestamp") {
		$date2 = $date; // depuis cette date
	} elseif($type == "date") {
		$date2 = strtotime($date); // depuis cette date
	} else {
		return "Non reconnu";
		exit();
	}
	$date1 = date("U"); // à la date actuelle
	$return = "";
	// ########  ANNEE ########
	if((date('Y',$date1 - $date2)-1970) > 0) {
		if((date('Y',$date1 - $date2)-1970) > 1) {
			$echo_annee = (date('Y',$date1 - $date2)-1970)." Anneés";
			$return = $echo_annee.", ";
		} else {
			$echo_annee = (date('Y',$date1 - $date2)-1970)." Année";
			$return = $echo_annee.", ";
		}
	} else {
		$echo_annee = "";
		$return = $return;
	}
	// ########  MOIS ########
	if((date('m',$date1 - $date2)-1) > 0) {
		$echo_mois = (date('m',$date1 - $date2)-1)." Mois ";
		if(!empty($echo_annee)) {
			$return = $echo_annee." et ".$echo_mois;
		} else {
			$return = $echo_mois;
		}
	} else {
		$echo_mois = "";
		$return = $return;
	}
	// ########  JOUR ########
	if((date('d',$date1 - $date2)-1) > 0) {
		if((date('d',$date1 - $date2)-1) > 1) {
			$echo_jour = (date('d',$date1 - $date2)-1)." Jours";
			if(!empty($echo_annee) OR !empty($echo_mois)) {
				$return = $return.$echo_mois." et ".$echo_jour;
			} else {
				$return = $return.$echo_mois.$echo_jour;
			}
		} else {
			$echo_jour = (date('d',$date1 - $date2)-1)." Jour";
			if(!empty($echo_annee) OR !empty($echo_mois)) {
				$return = $return.$echo_mois." et ".$echo_jour;
			} else {
				$return = $return.$echo_mois.$echo_jour;
			}
		}
	} else {
		$echo_jour = "";
		$return = $return;
	}
	// ########  HEURE ########
	if((date('H',$date1 - $date2)-1) > 0) {
		if((date('H',$date1 - $date2)-1) > 1) {
			$echo_heure = (date('H',$date1 - $date2)-1)." Heures";
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour)) {
				$return = $echo_annee.$echo_mois.$echo_jour." et ".$echo_heure;
			} else {
				$return = $echo_annee.$echo_mois.$echo_jour.$echo_heure;
			}
		} else {
			$echo_heure = (date('H',$date1 - $date2)-1)." Heure";
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour)) {
				$return = $echo_annee.$echo_mois.$echo_jour." et ".$echo_heure;
			} else {
				$return = $echo_annee.$echo_mois.$echo_jour.$echo_heure;
			}
		}
	} else {
		$echo_heure = "";
		$return = $return;
	}
	// ########  MINUTE ET SECONDE ########
	$virgule_annee = "";
	$virgule_mois = "";
	$virgule_jour = "";
	if(date('i',$date1 - $date2) > 0) {
		if(date('i',$date1 - $date2) > 1) {
			$echo_minute = round(date('i',$date1 - $date2))." Minutes";
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
				if(!empty($echo_annee)) {
					if(!empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_annee = ", ";
					}
				}
				if(!empty($echo_mois)) {
					if(!empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_mois = ", ";
					}
				}
				if(!empty($echo_jour)) {
					if(!empty($echo_heure)) {
						$virgule_jour = ", ";
					}
				}
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		} else {
			$echo_minute = round(date('i',$date1 - $date2))." Minute";
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
				if(!empty($echo_annee)) {
					if(!empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_annee = ", ";
					}
				}
				if(!empty($echo_mois)) {
					if(!empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_mois = ", ";
					}
				}
				if(!empty($echo_jour)) {
					if(!empty($echo_heure)) {
						$virgule_jour = ", ";
					}
				}
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		}
	} else {
		if(date('s',$date1 - $date2) > 1) {
			$echo_minute = round(date('s',$date1 - $date2))." Secondes";
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
				if(!empty($echo_annee)) {
					if(!empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_annee = ", ";
					}
				}
				if(!empty($echo_mois)) {
					if(!empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_mois = ", ";
					}
				}
				if(!empty($echo_jour)) {
					if(!empty($echo_heure)) {
						$virgule_jour = ", ";
					}
				}
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		} else {
			if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
				if(!empty($echo_annee)) {
					if(!empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_annee = ", ";
					}
				}
				if(!empty($echo_mois)) {
					if(!empty($echo_jour) OR !empty($echo_heure)) {
						$virgule_mois = ", ";
					}
				}
				if(!empty($echo_jour)) {
					if(!empty($echo_heure)) {
						$virgule_jour = ", ";
					}
				}
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		}
	}
	return "Il y a ".$return;
}
echo '<pre>';

$date = "1284346290";
echo temps_ecoule($date,"timestamp")."\n"; // timestamp ou date

$date = date('U')-9; // temps actuel, moins 9 secondes
echo temps_ecoule($date,"timestamp")."\n"; // affiche: Il y a 9 Secondes

$date = "13-04-2010 4:00";
echo temps_ecoule($date,"date")."\n";

$date = "13-04-2010 4:00";
echo temps_ecoule($date,"dat")."\n"; // Affiche: Non reconnu
echo '</pre>';
?>  



Il fonctionne impeccablement bien ; )
euh ...... flème ... :/
Une méthode tres simple est de passer par une conversion du calaendrier gregorien au calednrier julien voici le code :

class nbNuits {
function calc($startDate,$endDate){ // format jj/mm/aaaa
// Parse dates for conversion
$star=explode("/",$startDate);
$end=explode("/",$endDate);

// Convert dates to Julian Days
$start_date = gregoriantojd($star[1], $star[0], $star[2]);
$end_date = gregoriantojd($end[1], $end[0], $end[2]);

// Return difference
return round(($end_date - $start_date), 0);
}
}

pour + d'info :
http://www.php.net/manual/fr/function.date.php
Bravo pour le rappel de cette fonction gregoriantojd, c'est exactement ce qu'il me fallait après plusieurs jours de recherche pour calculer le nombre de jours d'écart entre 2 dates, et non pas le nombre de secondes d'écart converti en jours !!!
Messages postés
3661
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
853
Ca c'est du niveau école primaire
<?php
$XXX=1223456;
$sec=$XXX % 60;
$X=floor($XXX/60) ;
$min = $X %60 ;
$X = floor($X/60);
printf('%d hours, %d minutes, %d seconds\n', $X,$min,$sec);
?>

Tu évalueras de même, le nombre de jours( avec l'opérateur binaire % : reste de la division entière, a.k.a modulo). Pour les mois cela n'a pas beaucoup de sens.
s.spark
Messages postés
2502
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
556
C'est du niveau école primaire mais ton calcule est faux. Tu le dis toi même.
s.spark
Messages postés
2502
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
556 s.spark
Messages postés
2502
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018

Merde j'ai mélangé les serviettes et les torchons, voilà ce qui arrive quand on veut répondre à plusieurs sujet en même temps. Donc oui le calcule est bon bien sur, mais comme tu le dis il ne faut pas poursuivre ce raisonnement pour les mois.
Comment faire pour que les 3 variables précédemment utilisées dans la premiere fonction soient réutilisables dans la deuxieme ? L'idée était de découper la date en 3 puis des utiliser ensuite...

Après quelques jours de recherche, il suffisait de demander pour que la réponse puisse être trouvée...
Bref, pour ceux qui ont la même question, veuillez disséquer cette page : http://www.phpcs.com/codes/CALCUL-TEMPS-ECOULE-ENTRE-DATES_38828.aspx
Messages postés
488
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
99
Exacte

par contre, à ma connaissance, il n'y a pas une fonction qui te dit
que XXX secondes correspond à Y jours, Z heures, etc ....

A moins que quelqu'un ait une solution toute faite pour cela :-)

Messages postés
12
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
5 avril 2017

Ok ben j'ai essayé avec cette méthode mais bon elle marche pas est-ce que vous pouvez me dire où est l'erreur ?

La premiere fonction est sensée découper la date en jj mm et aaaa et après calculer avec la deuxieme fonction mais ça marche pas... quelqu'un peut m'aider svp ? Merci

<?

$date = '06/06/1994';





function date2timestamp($date)
{
list($day, $month, $year) = sscanf($date,"%d/%d/%d");
return mktime(0, 0, 0, $day, $month, $year);
}
echo date2timestamp($date);

function elapsed($day, $month, $year) {
  
  $todayMonth = date(n);
  $todayDay = date(j);
  $todayHour = date(G);
  $todayMinute = date(i);
  $monthday = date(nj);
  $link = $month.$day;
  $datepoint = $link;

  if ($monthday < $datepoint) $years = date(Y) - $year - 1;
  else $years = date(Y) - $year;
  if ($years < 1) $yearWord = '';
  elseif ($years == 1) $yearWord = 'year,';
  elseif ($years > 1) $yearWord = 'years,';
  if ($todayMonth > $month) {
    if ($todayDay < $day) $months = $todayMonth - $month -1;
    else $months = $todayMonth - $month;
  } else {
    $between = $month - $todayMonth;
    $plus = 12 - $month;
    if ($todayDay < $day) $months = $month + $plus - $between -1;
    else $months = $month + $plus - $between;
  }
  if ($months == 1) $monthWord = 'month,';
  elseif ($months > 1) $monthWord = 'months,';
  if ($todayDay > $day) {
    if ($todayHour < $hour) $days = $todayDay - $day -1;
    else $days = $todayDay - $day;
  } else {
    $between = $day - $todayDay;
    $daysToEndOfMonth = date(t) - $day;
    if (date(t) == 28) $plus = $daysToEndOfMonth;
    if (date(t) == 29) $plus = $daysToEndOfMonth;
    if (date(t) == 30) $plus = $daysToEndOfMonth;
    if (date(t) == 31) $plus = $daysToEndOfMonth;
    if ($todayHour < $hour) $days = $day + $plus - $between - 1;
    else $days = $day + $plus - $between;
  }
  if ($days == 1) $dayWord = 'day';
  else $dayWord = 'days';
  if ($todayHour > $hour) {
    if ($todayMinute < $minute) $hours = $todayHour - $hour - 1;
    else $hours = $todayHour - $hour;
  } else { 
    $between = $hour - $todayHour;
    $plus = 24 - $hour;
    if ($todayMinute < $minute) $hours = $hour + $plus - $between - 1;
    else $hours = $hour + $plus - $between;
  }
  if ($hours == 1) $hourWord = 'hour,';
  if ($hours > 1) $hourWord = 'hours,';
  if ($todayMinute > $minute) {
    $minutes = $todayMinute - $minute;
  } else { 
    $between = $minute - $todayMinute;
    $plus = 60 - $minute;
    $minutes = $minute + $plus - $between;
  }
  if ($minutes == 60) $minutes = 0;
  if ($minutes == 1) $minuteWord = 'minute';
  elseif ($minutes > 1) $minuteWord = 'minutes';
  if ($years == 0) { $years = ''; $yearWord = ''; }
  if ($months == 0) { $months = ''; $monthWord = ''; }
  if ($days == 0) { $days = ''; $dayWord = ''; }
  if ($hours == 0) { $hours = ''; $hourWord = ''; }
  if ($minutes == 0) { $minutes = ''; $minuteWord = ''; }
  echo $years.' '.$yearWord.' '.$months.'  '.$monthWord.' '.$days.' '.$dayWord.'';
}



date2timestamp($date);
elapsed($day, $month, $year);


?>

Le sujet correspond un peu à ma problématique. Les réponses données ne correspondent à pas grand chose...

Ayant deux dates (format yyyymmddhhiiss), la conversion par mktime est assez bancale et me décale le résultat d'un écart significatif...

Exemple : entre 20090710174718 et 20090709120313, on a bien 1 jour, 5h, 44min, 5sec lorsque le calclul est fait "à la main" et on obtient 1 jour, 4h, 44min, 6sec. Et oui, pour 1h06sec, c'est un bien grand écart...

Si par hasard quelqu'un avait une idée plus précise, je veux bien prendre une nouvelle solution !
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1397
Salut,

Ca se passe avec mktime()
http://fr2.php.net/manual/en/function.mktime.php

Exemple, si tu fais:
mktime(0, 0, 0, 12, 55, 2005);

Ici, le 55 est le nombre pour les jours... Il ne devrait pas être superieur à 31, donc Php te convertira comme il faut, en ajoutant un mois et en faisant le bon calcul.

Ensuite avec date(), tu récupère comme tu veux ta date calculée, sachant que ton timestamp retourné par mktime doit être passé en deuxième argument de date(), ex:
$a=mktime(0, 0, 0, 12, 55, 2005);
echo date("Y",$a);

Ca affichera l'année...
s.spark
Messages postés
2502
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
556
Salut,

Tu calcules une date pas un écart de temps.
Pour faire le calcul entre 2 dates, allez sur ce site.

http://www.horlogeparlante.com/calc_time.php

T'es con ou t'es con, on demande du php pas un site -_-
albertdu93
Messages postés
33
Date d'inscription
mardi 13 janvier 2009
Statut
Membre
Dernière intervention
30 mars 2012
1
Laisse il a rien capté -_-