Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/03/2011, 16h35   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Par défaut Soustraire 2 dates (format datetime)

Bonjour,

Tout d'abord, je tiens à préciser que j'ai déjà cherché sur pas mal de forum comment soustraire 2 dates mais j'ai pas trouvé ce que je recherchais vraiment, donc je fais appel à vous.

J'aimerai tout simplement soustraire 2 dates formats datetime pour avoir la durée entres ces 2 dates (plus souvent en heure et minute).

Merci d'avance pour votre aide
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 16h44   #2
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Salut,

Tu as la fonction la méthode diff et de DateTime pour cela.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 16h57   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Merci pour ta réponse.

J'ai pas l'impression que ça fonctionne avec les dates en format datetime (AAAA-MM-JJ HH:MM:SS)

Voila mon code

Code :
1
2
3
4
5
6
 
$departureDate = '2011-03-08 07:32:00';
$arrivalDate = '2011-03-08 12:45:00';
 
$period = date_diff($departureDate, $arrivalDate);
echo $period;
$period devrait donc contenir la durée entre la date de départ et la date d'arrivée
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/03/2011, 17h17   #4
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Code :
1
2
3
4
5
 
$date1 = date_create( '2011-03-08 07:32:00' );
$datete2 = date_create( '2011-03-08 12:45:00' );
$date_interval = date_diff( $date1, $date2 );
echo $date_interval->format('%d% jours, %h% heures, %i% minutes, %s% minutes');
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 17h18   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par Arkoze Voir le message
Voila mon code

Code :
1
2
3
4
5
6
 
$departureDate = '2011-03-08 07:32:00';
$arrivalDate = '2011-03-08 12:45:00';
 
$period = date_diff($departureDate, $arrivalDate);
echo $period;
$period devrait donc contenir la durée entre la date de départ et la date d'arrivée
Attention, date_diff n'est compatible que PHP >= 5.3
De plus, cette fonction n'accepte pas de string mais des objets DateTime.

Depuis les commentaires du manuel :

Code :
1
2
3
4
5
<?php
$today = strtotime("2011-02-03 00:00:00");
$myBirthDate = strtotime("1964-10-30 00:00:00");
printf("I'm %d days old.", round(abs($today-$myBirthDate)/60/60/24));
?>
Il faut juste adapter la division "/60/60/24" pour que ce soit des minutes/heures/jours (indice : là, c'est jour )
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 17h23   #6
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
mes dates sont bien des objets du type datetime, ce sont des dates que je récupere via une base de données mais j'ai pas trop suivi l'histoire de la division :s
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/03/2011, 17h28   #7
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Arkoze : Tes dates ne sont pas des objets mais des chaînes de caractère. regardes mon post (exemple) précèdent
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 17h31   #8
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par Arkoze Voir le message
mes dates sont bien des objets du type datetime, ce sont des dates que je récupere via une base de données mais j'ai pas trop suivi l'histoire de la division :s
Ne pas confondre, le type datetime (qui vient de la base de donnée) qui est une string avec un format prédéfini et un objet PHP DateTime qui peut être construit grâce à la fonction date_create.

Si tu n'as pas PHP 5.3 sur ton serveur, tu ne pourras pas utiliser ce raccourci que Thes32 donne avant moi

Il te faudra alors transformer tes string en date (timestamp)

Code :
1
2
$departureDate = strtotime("2011-03-08 07:32:00");
$arrivalDate = strtotime("2011-03-08 12:45:00");
Puis appliquer les calculs voulus dessus. Par exemple :

Code :
round(abs($arrivalDate -$departureDate )/60/60/24)
Les timestamps sont en millisecondes (si je ne me trompe pas) il faut donc diviser pour avoir les secondes ou minutes ou jours... etc.
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 17h58   #9
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Ok merci, c'est beaucoup plus clair pour moi, je vais essayer ça
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 18h28   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
Citation:
Envoyé par Shikiryu Voir le message
Puis appliquer les calculs voulus dessus. Par exemple :

Code :
round(abs($arrivalDate -$departureDate )/60/60/24)
Les timestamps sont en millisecondes (si je ne me trompe pas) il faut donc diviser pour avoir les secondes ou minutes ou jours... etc.
un jour c'est pas forcement 24h
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 18h32   #11
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
cool ça fonctionne bien, par contre, comment gérer le fait qu'au lieu de m'afficher 4.5, j'aimerai qu'il prenne en compte les minutes donc 4h30
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 19h30   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
http://www.developpez.net/forums/d10...e/#post5816912
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 15h42   #13
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Nickel, ça fonctionne !

Encore merci
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 15h54   #14
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Ah mince, j'ai parlé trop vite jpense, j'ai le meme probleme que sur l'autre post

il m'affiche 4h2 au lieu de 4h02 pourtant j'ai bien fait comme c'était dit dans l'autre post

Code :
1
2
3
 
$diff = 1299157211 - 1299153749;
$attente = sprintf("%02d",floor($diff/3600))  . "h" . sprintf("%02d",($diff/60)%60);
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h23   #15
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Chez moi ca fait 00h57
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h49   #16
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
C'était juste pour l'exemple, et si tu fais

Code :
1
2
3
 
$diff = 1299571200 - 1299585720;
$attente = sprintf("%02d",floor($diff/3600))  . "h" . sprintf("%02d",($diff/60)%60);
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h52   #17
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ca donne -5h-2 : tes temps sont a l'envers
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h59   #18
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Justement, que les dates soient inversées ou pas, il m'affiche 4h2 au lieu de 4h02 :s
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 17h17   #19
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Chez moi ça fonctionne.
Vérifie ce que tu as écris car tes deux exemples ne correspondaient pas a ce que voulait.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 17h26   #20
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Il t'affiche bien le 0 de la dizaine des minutes ?
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h53.


 
 
 
 
Partenaires

Hébergement Web