PHP : petite question...calculer le temps entre 2 dates... - Programmation
Marsh Posté le 26-08-2001 à 16:30:03
up !
pourtant ca a l'air simple mais j'ai b0 chercher partout...
[edtdd]--Message édité par Texaff nbvcxwqazerty--[/edtdd]
Marsh Posté le 26-08-2001 à 17:05:30
En effet, Avec mktime(), tu aura ta date au format UNIX (comptage des secondes depuis xx/xx/1970 ainsi en faisant la soustraction des deux dates au format mktime, tu connaitra le temps qui s'est écoulé
Marsh Posté le 26-08-2001 à 17:52:42
antibillou a écrit a écrit : En effet, Avec mktime(), tu aura ta date au format UNIX (comptage des secondes depuis xx/xx/1970 ainsi en faisant la soustraction des deux dates au format mktime, tu connaitra le temps qui s'est écoulé |
ok je vais voir merci!
Marsh Posté le 26-08-2001 à 18:43:47
bon alors voila mon truc:
voici la premiere date:
$date1=date("Y,m,d,H:i:s" );
print(mktime($date));
voici la 2nde(date recuperer d une table mysql creer longtps avant...):
print(mktime($date2));
et les 2 print m'affiche sensiblement la meme chose! comment ca se fait?
merci pour votre aide en tout cas!
[edtdd]--Message édité par Texaff nbvcxwqazerty--[/edtdd]
Marsh Posté le 26-08-2001 à 18:54:22
Texaff nbvcxwqazerty a écrit a écrit : bon alors voila mon truc: voici la premiere date: $date1=date("Y,m,d,H:i:s" ); print(mktime($date)); voici la 2nde(date recuperer d une table mysql creer longtps avant...): print(mktime($date2)); et les 2 print m'affiche sensiblement la meme chose! comment ca se fait? merci pour votre aide en tout cas! |
tu a 3 variables, est-ce normal ? ($date, $date1, $date2)
Marsh Posté le 26-08-2001 à 19:05:27
Texaff nbvcxwqazerty a écrit a écrit : bon alors voila mon truc: voici la premiere date: $date1=date("Y,m,d,H:i:s" ); print(mktime($date)); voici la 2nde(date recuperer d une table mysql creer longtps avant...): print(mktime($date2)); et les 2 print m'affiche sensiblement la meme chose! comment ca se fait? merci pour votre aide en tout cas! |
tout est dans le 'sensiblement' mktime() convertit une date en nombre de secondes écoulées depuis ... je sais plus quand.
donc mktime($date2) - mktime($date1) te donnera le temps entre les deux dates, en secondes.
Marsh Posté le 26-08-2001 à 19:06:48
Encore 1 fois...c'est 100 fois + simple de stocker ds ta bdd le timestamp (nbre de secondes depuis le 1er janv 1970) récupéré avec time() ou plein d'autres fonctions...
=> les opérations entre +sieurs dates st super simples...
=> le passage à une date normale est aussi...super simple...
en plus ça prend moins de place ds ta bdd...
si avec ça t'es pas convaincu...
Marsh Posté le 26-08-2001 à 19:12:29
et autrement si ça te donne la mm chose c parce que t'as pas bien lu la doc...
dans mktime comme ds ttes les fonctions, le séparateur c'est la virgule...et voilà ce que tu demandes en fait...
mktime(Y,m,d,H:i:s)
donc comment tu veux que ça marches ?
=> ça, ça te donnerait le timestamp pour cette date : mktime(heure,minute,seconde,mois,jour,annee)
donc si tu tiens vraiment à ton truc, il faut trafiquer ta date avec des regex...
Marsh Posté le 26-08-2001 à 21:37:48
antibillou >> erreur de frappe
you dont care>> en fait c'est bien le code qui est faux
M@nou>> alors j'ai suivi ce que tu m'as dis c'est a dire ma table contient un bigint a la place d'une date.
voila mon code:
$tecoule= 0 ;
$annee=date(Y);
$mois=date(m);
$jour=date(d);
$heure=date(H);
$minute=date(i);
$seconde=date(s);
$date1=mktime($heure,$minute,$seconde,$mois,$jour,$annee);
$tdata= mysql_query("SELECT * FROM Table WHERE personne like '$personne' ORDER by date DESC" );
$nbpse = mysql_numrows($tdata);
if ($nbpse != 0)
{$date2 = mysql_result($date2,0,"date" );
$tecoule = ($date1-$date2);
print($tecoule);
voila le code c'est donc une personne qui a chaque fois qu'elle se presente affiche une date, et regarde depuis la derniere fois qu'elle venu le temps qui s'est ecoulé.
seulement $tecoule augmente tout le temps, a croire que $date2 est la 1 ere entré et pas la derniere comme je le veux
bon j'espere que j'ai ete clair...
quelqu'un vois mon erreur?
EN TOUT CAS MERCI A VOUS TROIS!
[edtdd]--Message édité par Texaff nbvcxwqazerty--[/edtdd]
Marsh Posté le 27-08-2001 à 09:59:26
upupupupupupupupuppppppppp
[edtdd]--Message édité par Texaff nbvcxwqazerty--[/edtdd]
Marsh Posté le 27-08-2001 à 10:32:49
Bon enfait je reessaye ce matin ... et ca marche nickel.
allez savoir pkoi!
maintenant il me reste a restituer cet enorme nombre en date...
je pense que j'aurai pas trop de probleme.
merci M@nou pour ta technique!
a+
Marsh Posté le 27-08-2001 à 11:14:33
Petite routine que j'ai fait si ca peut t'aider
function DiffDate($Date_Appel,$Date_Appeldeb)
{
/*-------------------------------------------------------------
Calcul d'uner duree en seconde entre 2 dates
$Tps = strToTime($Date_Appel);
$Tpsdeb= strToTime($Date_Appeldeb);
$dd=substr($Date_Appel,0,2);
$mm=substr($Date_Appel,3,2);
$yy=substr($Date_Appel,6,4);
$hh=substr($Date_Appel,11,2);
$mi=substr($Date_Appel,14,2);
$ss=substr($Date_Appel,17,2);
$dddeb=substr($Date_Appeldeb,0,2);
$mmdeb=substr($Date_Appeldeb,3,2);
$yydeb=substr($Date_Appeldeb,6,4);
$hhdeb=substr($Date_Appeldeb,11,2);
$mideb=substr($Date_Appeldeb,14,2);
$ssdeb=substr($Date_Appeldeb,17,2);
$Tps=mkTime($hh,$mi,$ss,$mm,$dd,$yy);
$Tpsdeb=mkTime($hhdeb,$mideb,$ssdeb,$mmdeb,$dddeb,$yydeb);
$Duree = $Tps - $Tpsdeb;
return $Duree;
Marsh Posté le 27-08-2001 à 11:15:09
$dat=date("H:i:s m/d/Y ",mktime(0,0,$date2));
print("$date2" );
il m'affiche
8:25:31 04/22/2033
hors on est pas trop en 2033?? ni le 22 avril ni a 8:25...
Marsh Posté le 27-08-2001 à 11:17:00
persnet a écrit a écrit : Petite routine que j'ai fait si ca peut t'aider function DiffDate($Date_Appel,$Date_Appeldeb) { /*------------------------------------------------------------- Calcul d'uner duree en seconde entre 2 dates $Tps = strToTime($Date_Appel); $Tpsdeb= strToTime($Date_Appeldeb); $dd=substr($Date_Appel,0,2); $mm=substr($Date_Appel,3,2); $yy=substr($Date_Appel,6,4); $hh=substr($Date_Appel,11,2); $mi=substr($Date_Appel,14,2); $ss=substr($Date_Appel,17,2); $dddeb=substr($Date_Appeldeb,0,2); $mmdeb=substr($Date_Appeldeb,3,2); $yydeb=substr($Date_Appeldeb,6,4); $hhdeb=substr($Date_Appeldeb,11,2); $mideb=substr($Date_Appeldeb,14,2); $ssdeb=substr($Date_Appeldeb,17,2); $Tps=mkTime($hh,$mi,$ss,$mm,$dd,$yy); $Tpsdeb=mkTime($hhdeb,$mideb,$ssdeb,$mmdeb,$dddeb,$yydeb); $Duree = $Tps - $Tpsdeb; return $Duree; |
ca m'interesse mais en quel forumat sont les dates?
Marsh Posté le 27-08-2001 à 11:18:33
on peut remplacer ça :
$annee=date(Y);
$mois=date(m);
$jour=date(d);
$heure=date(H);
$minute=date(i);
$seconde=date(s);
$date1=mktime($heure,$minute,$seconde,$mois,$jour,$annee);
par ça : $date1=time();
et autrement y'en a qui se compliquent bcp la vie ("petite routine"...heu....)
[edtdd]--Message édité par M@nu--[/edtdd]
Marsh Posté le 27-08-2001 à 11:23:33
M@nu a ecrit
et autrement y'en a qui se compliquent bcp la vie ("petite routine...heu....)
Mes dates sont au format dd/mm/yyyy
T'as une autre solution pour les convertir et utiliser le mktime?
Marsh Posté le 27-08-2001 à 11:29:19
manou>>
efectivemnt y a plus simple
mais ca resoud aps mon probleme
Marsh Posté le 27-08-2001 à 11:36:21
Si ca peut tjs t'aider malgre les remarques de certains, un touuuuuuuute petite routine qui tranforme un temps en hhh:mm:ss
function Caldureehms($Duree)
{
// Mise en forme d'une duree (en seconde) au format hh:mm:ss
$Heure=intval($Duree/3600);
$Reste=$Duree%3600;
$Minute=intval($Reste/60);
$Seconde=$Reste%60;
$Resultat = $Heure.":".sprintf("%02d",$Minute).":".sprintf("%02d",$Seconde);
return $Resultat;
Marsh Posté le 27-08-2001 à 11:39:13
persnet a écrit a écrit : Si ca peut tjs t'aider malgre les remarques de certains, un touuuuuuuute petite routine qui tranforme un temps en hhh:mm:ss function Caldureehms($Duree) { // Mise en forme d'une duree (en seconde) au format hh:mm:ss $Heure=intval($Duree/3600); $Reste=$Duree%3600; $Minute=intval($Reste/60); $Seconde=$Reste%60; $Resultat = $Heure.":".sprintf("%02d",$Minute).":".sprintf("%02d",$Seconde); return $Resultat; |
mais moi il doit y avoir l'annee le moi et le jour aussi...
sinon pour ton script plus haut, les date sont en quel format?
Marsh Posté le 27-08-2001 à 11:46:01
Mes dates sont au format DD/MM/YYYY HH:MI:SS
pour l'annee le mois et le jour tu peux tres bien diviser ton timestamp par 86400 et tu aura le nombre de jours ecoules
Marsh Posté le 27-08-2001 à 11:59:32
persnet a écrit a écrit : Mes dates sont au format DD/MM/YYYY HH:MI:SS pour l'annee le mois et le jour tu peux tres bien diviser ton timestamp par 86400 et tu aura le nombre de jours ecoules |
ton truc a l'air plutot complexe, vu que c'est du bidouillage.
(mais ca marche !)
je prefere faire technique "correct".
surtout que je sans que je suis proche du but seulement y a une enorme couille lors de l'affichage de la date!
pourquoi il m'affiche 2033 c'est incomprehensible!!
Marsh Posté le 26-08-2001 à 16:14:40
voila ma date est dans ce format:
date("Y,m,d,H,i,s" )
j'en affichhe 2 a un peu pres 40 seconde d'intervalle.,
afficher :"entre les deux date il s'est ecoulé 40 secondes."
enclair c'est une comparaison entre les 2 dates..
merci pour votre aide
a+
[edtdd]--Message édité par Texaff nbvcxwqazerty--[/edtdd]