NOMBRE DE JOURS ENTRE DEUX DATE EN UNE SEULE LIGNE
cs_webdusud
Messages postés13Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention21 juillet 2008
-
26 oct. 2004 à 08:50
Adri74100
Messages postés1Date d'inscriptionvendredi 5 décembre 2008StatutMembreDernière intervention28 avril 2012
-
28 avril 2012 à 15:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Adri74100
Messages postés1Date d'inscriptionvendredi 5 décembre 2008StatutMembreDernière intervention28 avril 2012 28 avril 2012 à 15:22
Commentaire à devil1591:
Si on fait la différence entre deux dates éloignées, le while fera plusieurs centaines voir milliers d'appels aux fonctions date et strtotime... Voici une méthode plus rapide, qui gère bien les années bissextiles et les décalages horaires:
cs_Mik4do
Messages postés2Date d'inscriptionsamedi 19 juillet 2003StatutMembreDernière intervention 2 janvier 2010 22 sept. 2010 à 20:56
Bonjour à tous et toutes,
J'ai pris un peu de temps pour décortiquer de quelle manière je pouvais trouver le nombre de 1/4 d'heure entre deux dates mais également entre des heures.. pour par exemple établir le début d'un travail à tel moment et le terminer à tel moment.
<?
function date_diff($datedebut,$datefin) /// format de vos dates date("Y-m-d H:i:s");
{
list($de,$td) = explode(' ', $datedebut); // Séparation date et heure début
list($df,$tf) = explode(' ',$datefin); // Séparation date et heure fin
$dd split("-",$de); $ddannee $dd[0]; $ddmois = $dd[1]; $ddjour = $dd[2]; /// date 1$hd split(":",$td); $hdheure $hd[0]; $hdmin = $hd[1]; $hdsec = $hd[2]; /// heure 1
$df split("-",$df); $dfannee $df[0]; $dfmois = $df[1]; $dfjour = $df[2]; /// date 2$hf split(":",$tf); $hfheure $hf[0]; $hfmin = $hf[1]; $hfsec = $hf[2]; /// heure 2
$time1=time() - mktime($hdheure, $hdmin, $hdsec, $ddmois, $ddjour, $ddannee);
/// difference de seconde entre 1-1-1970 et la date 1
$time2=time() - mktime($hfheure, $hfmin, $hfsec, $dfmois, $dfjour, $dfannee);
/// difference de seconde entre 1-1-1970 et la date 2
$tsecs = ceil(($time1-$time2)/60/15); /// time1 - time2 donne le nombre en secondes
/// pour avoir les minutes on divise par 60
/// ensuite divise par 15 pour voir le nombre de 1/4 d'heure
/// et j'arrondis le tout au dessus car le quart d'heure
/// débuté est automatiquement facturé
$texte=$tsecs;
return $texte;
}
?>
Pour utiliser la fonction :
<?
$quantiteminutes=date_diff("2010-09-22 15:30:00","2010-09-22 16:16:00");
echo $quantiteminutes; /// affichage du nombre : 4 soit 4 1/4 d'heure entamés
?>
Dites moi si il y a plus simple, mais en cherchant, je n'ai pas trouvé ce genre de fonction :-)
Bon amusement,
Mikado
Course-folle.com
djfatcut
Messages postés11Date d'inscriptionmardi 18 novembre 2008StatutMembreDernière intervention 4 juillet 2010 4 juil. 2010 à 17:39
Je me suis inscrit juste pour te remercier Magidev
J'ai besoin de cette fonction, je m'apprêtais a y passer la nuit (voir plus). J'ai fait une petite recherche sur google histoire de trouvez quelques infos, et je tombe sur ton code. Je prend le code, je le rajoute sur ma page, je remplace $date1 et $date2 par les noms de mes variables je teste et op ca marche.
Autrement dit, au lieu d'y passer la nuit, ca m'a pris 5 minutes grace a toi. Reste plus qu'a faire un peu de maths.
Vraiment un gros gros MERCI Magidev et merci aussi a toutes les personnes qui ont poussé le sujet plus loin, je suis sur que ca me servira.
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 13 juil. 2009 à 22:23
Si les deux dates sont la même année, on peut faire :
date('z', $date1) - date('z', $date2);
Si les dates sont dans des années différentes, il faut alors utiliser une autre méthode, qui prennent en compte les années bisextiles et les non-bisexiles...
devil1591
Messages postés2Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention23 novembre 2007 23 nov. 2007 à 14:38
Qui gèrera les....décalages d'heure d'hiver/été !
A+
devil1591
Messages postés2Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention23 novembre 2007 2 nov. 2007 à 16:52
osman_amine
Messages postés14Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention 5 juillet 2007 31 juil. 2007 à 13:38
salut tout le monde.
qq peut m'envoyer le code de difference de deux timestamp en java.
csiko
Messages postés4Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention16 juillet 2007 16 juil. 2007 à 17:06
code impeccable et très utile, merci. ça valait le coup de faire une source même court, je viens de gagner 1 ou 2 heures de boulot grâce à toi !
dvlcerbere
Messages postés9Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 2 juillet 2007 2 juil. 2007 à 15:04
merci pour les posts sa m'a permis de beaucoup avancée maintenant il me reste une question est ce possible et comment reprendre le même systême
mais cette fois pour avoir le nombre de secondes entre la date d'aujourd'hui et une date donnée.
car je suis pas sur que se soit possible avec strtotime
Je sais que mon code est faux, peut-on m'éclairer si possible ? Merci
cs_sonia5
Messages postés26Date d'inscriptionvendredi 29 septembre 2006StatutMembreDernière intervention 8 septembre 2009 22 juin 2007 à 01:24
Merci beaucoup pour ce gènial code
cs_destiny
Messages postés249Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention29 août 2011 14 juin 2007 à 04:54
Bravo, c'est tout simplement excelent! j'ai gagné pas mal de ligne pour mon angenda ;)
cs_banquette
Messages postés10Date d'inscriptionjeudi 21 octobre 2004StatutMembreDernière intervention11 mai 2007 11 mai 2007 à 12:07
Pour moi, les 2 sources donnent des résultats faux ; pour preuve ce code qui donne 0 alors qu'on attend 1 :
<?php
$date1 = "27 March 2005";
$date2 = "28 March 2005";
Il faut donc rajouter au moins 1 heure en secondes lors de la soustraction des 2 dates pour tomber dans le bon jour lors du changement d'heure en heure d'été :
<?php
$date1 = "27 March 2005";
$date2 = "28 March 2005";
Simple, rapide, efficace, merci pour cette source !
cs_redlist
Messages postés3Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention25 septembre 2007 25 nov. 2005 à 14:22
Bonjour, je me suis appuyé sur cette ligne pour calculer le nombre de jours entre aujourd'hui et une date future (avec une variante : afficher des mois, puis des jours) :
$date1=date("Y-m-d"); // date du jour
//$date1=20051231; // si on choisit de partir d'une date fixe AAAAMMJJ
$date2=20080301; // date cible à renseigner
$nbday = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1); // nb jours
if ($nbday < 45) {
$nbmonth = round(($nbday)/7/4); // affiche les mois restant
echo $nbmonth;
}
else {
echo $nbday; // affiche les jours restant
cs_redlist
Messages postés3Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention25 septembre 2007 25 nov. 2005 à 14:22
Bonjour, je me suis appuyé sur cette ligne pour calculer le nombre de jours entre aujourd'hui et une date future (avec une variante : afficher des mois, puis des jours) :
$date1=date("Y-m-d"); // date du jour
//$date1=20051231; // si on choisit de partir d'une date fixe AAAAMMJJ
$date2=20080301; // date cible à renseigner
$nbday = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1); // nb jours
if ($nbday < 45) {
$nbmonth = round(($nbday)/7/4); // affiche les mois restant
echo $nbmonth;
}
else {
echo $nbday; // affiche les jours restant
cs_zdm
Messages postés2Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention 6 juillet 2005 6 juil. 2005 à 16:27
Je viens de tester la proposition de Magidev et cela fonctionne grace au round qui arrondi a la valeur superieure ou inferieure suivant la valeur du resultat.
Si vous calculez le nombre de secondes en le 28/03/2005 - 0:0:0 et le 27/03/2005 - 0:0:0 vous obtiendrez 82800 et non 86400.
Et 82800 = 86400 - 3600. C'est-a-dire 1 heure.
cs_zdm
Messages postés2Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention 6 juillet 2005 6 juil. 2005 à 08:50
Cette methode est efficace car elle tient en une ligne, mais elle ne fonctionne pas pour tous les pays.
Pour la France par exemple, elle ne prend en compte les changements d'heure (ete, hiver). Le calcul se basant sur le nombre de secondes (60*60*24 = 86400) dans une journee fausse le resultat.
Encore une petite remarque sur le calcul du nombre de lundi, qui posera probleme lorsque le calcul sera a cheval sur 2 annees.
Virus_T
Messages postés1Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention24 juin 2005 24 juin 2005 à 09:42
Joli, moi je voudrait faire une comparaison entre deux date ( en fait entre les mois de ces 2 dates). Pour etre plus clair, je veux qu'une reservation puisse se faire seulement et uniquement 30 jour a l avance ! donc je compare la date selctoinner et lza date systeme ; mais ca marche pas si vous pouvier m aider
%W - numéro de semaine dans l'année, en considérant le premier lundi de l'année comme le premier jour de la première semaine.
Ca me parait bien...
;-)
cs_xmag
Messages postés23Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention11 juin 2007 15 juin 2005 à 16:36
Salut,
Et en une ligne, est ce que tu peux me dire comment calculer le nombre de lundi entre deux dates? (c'est pour calculer le nombre de semaines commençant par un lundi entre deux dates)...
Merci ;-)
platinum75
Messages postés16Date d'inscriptionsamedi 4 mai 2002StatutMembreDernière intervention 5 décembre 20041 5 déc. 2004 à 08:27
Source super, par contre il me semble qu'il y a une petite erreur. En fait le -1 à la fin semble fausser les résultats. Voilà ;-)
Le format AAAA-MM-JJ est un format de date dit Anglais, donc tu n'as pas besoin de le convertir
Le manuel php dit ceci :
********************
strtotime
(PHP 3>= 3.0.12, PHP 4 , PHP 5)
strtotime -- Transforme un texte anglais en timestamp
Description
int strtotime ( string time [, int now])
strtotime() essaye de lire une date au format anglais dans la chaîne time, et de la transformer en timestamp UNIX, relativement au timestamp now, ou à la date courante si ce dernier est omis. En cas d'erreur, -1 est retourné.
Comme strtotime() suit la syntaxe de date GNU, vous pouvez lire le manuel GNU intitulé Date Input Formats. Ci-dessous, vous trouverez une syntaxe valide pour le paramètre time.
Exemple 1. Exemple avec strtotime()
<?php
// l'exemple n'est pas traduit, car cela ne fonctionne qu'en anglais
echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";
?>
Exemple 2. Vérification des erreurs avec strtotime()
$str = 'Pas une bonne date';
if (($timestamp strtotime($str)) -1) {
echo "La chaîne ($str) est bogus";
} else {
echo "$str == ". date('l dS of F Y h:i:s A',$timestamp);
}
Note : L'intervalle de validité d'un timestamp va du Vendredi 13 Décembre 1901 20:45:54 GMT au Mardi 19 Jan 2038 03:14:07 GMT : cela correspond aux dates maximales et minimales pour un entier de 32 bits signé.
cs_akhenaton
Messages postés18Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention10 juin 2008 3 nov. 2004 à 21:22
Bonsoir
vraiment la source est tres pratique, j'ai juste une question : si je veut par exemple le nombre de jour entre deux dates dont le format est AAAA-MM-JJ doit je les convertir? est comment ?
cordialement
fuckya
Messages postés125Date d'inscriptionmercredi 31 mars 2004StatutMembreDernière intervention 8 juin 2006 3 nov. 2004 à 20:50
hihi tu as finalement trouvé la source date idéale félicitation ^^
cs_webdusud
Messages postés13Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention21 juillet 2008 26 oct. 2004 à 08:50
les sources les plus simples sont les meilleurs !
merci...
28 avril 2012 à 15:22
Si on fait la différence entre deux dates éloignées, le while fera plusieurs centaines voir milliers d'appels aux fonctions date et strtotime... Voici une méthode plus rapide, qui gère bien les années bissextiles et les décalages horaires:
function nb_jours($sDate1, $sDate2){
$iNbJours = date('z', strtotime($sDate2)) - date('z', strtotime($sDate1));
$iNbAnnees = date('Y', strtotime($sDate2)) - date('Y', strtotime($sDate1));
for ($i = 0; $i < $iNbAnnees; $i++){
$iNbJours += date("z", mktime(0, 0, 0, 12, 31, date('Y', strtotime($sDate1)) + $i)) + 1;
}
return $iNbJours;
}
22 sept. 2010 à 20:56
J'ai pris un peu de temps pour décortiquer de quelle manière je pouvais trouver le nombre de 1/4 d'heure entre deux dates mais également entre des heures.. pour par exemple établir le début d'un travail à tel moment et le terminer à tel moment.
<?
function date_diff($datedebut,$datefin) /// format de vos dates date("Y-m-d H:i:s");
{
list($de,$td) = explode(' ', $datedebut); // Séparation date et heure début
list($df,$tf) = explode(' ',$datefin); // Séparation date et heure fin
$dd split("-",$de); $ddannee $dd[0]; $ddmois = $dd[1]; $ddjour = $dd[2]; /// date 1$hd split(":",$td); $hdheure $hd[0]; $hdmin = $hd[1]; $hdsec = $hd[2]; /// heure 1
$df split("-",$df); $dfannee $df[0]; $dfmois = $df[1]; $dfjour = $df[2]; /// date 2$hf split(":",$tf); $hfheure $hf[0]; $hfmin = $hf[1]; $hfsec = $hf[2]; /// heure 2
$time1=time() - mktime($hdheure, $hdmin, $hdsec, $ddmois, $ddjour, $ddannee);
/// difference de seconde entre 1-1-1970 et la date 1
$time2=time() - mktime($hfheure, $hfmin, $hfsec, $dfmois, $dfjour, $dfannee);
/// difference de seconde entre 1-1-1970 et la date 2
$tsecs = ceil(($time1-$time2)/60/15); /// time1 - time2 donne le nombre en secondes
/// pour avoir les minutes on divise par 60
/// ensuite divise par 15 pour voir le nombre de 1/4 d'heure
/// et j'arrondis le tout au dessus car le quart d'heure
/// débuté est automatiquement facturé
$texte=$tsecs;
return $texte;
}
?>
Pour utiliser la fonction :
<?
$quantiteminutes=date_diff("2010-09-22 15:30:00","2010-09-22 16:16:00");
echo $quantiteminutes; /// affichage du nombre : 4 soit 4 1/4 d'heure entamés
?>
Dites moi si il y a plus simple, mais en cherchant, je n'ai pas trouvé ce genre de fonction :-)
Bon amusement,
Mikado
Course-folle.com
4 juil. 2010 à 17:39
J'ai besoin de cette fonction, je m'apprêtais a y passer la nuit (voir plus). J'ai fait une petite recherche sur google histoire de trouvez quelques infos, et je tombe sur ton code. Je prend le code, je le rajoute sur ma page, je remplace $date1 et $date2 par les noms de mes variables je teste et op ca marche.
Autrement dit, au lieu d'y passer la nuit, ca m'a pris 5 minutes grace a toi. Reste plus qu'a faire un peu de maths.
Vraiment un gros gros MERCI Magidev et merci aussi a toutes les personnes qui ont poussé le sujet plus loin, je suis sur que ca me servira.
13 juil. 2009 à 22:23
date('z', $date1) - date('z', $date2);
Si les dates sont dans des années différentes, il faut alors utiliser une autre méthode, qui prennent en compte les années bisextiles et les non-bisexiles...
23 nov. 2007 à 14:38
A+
2 nov. 2007 à 16:52
function nb_jours($debut, $fin)
{
$nb = 0;
while ($debut != $fin) {
$debut = date('Y-m-d', strtotime($debut.' +1 day'));
$nb++;
}
return $nb;
}
echo nb_jours('2007-10-28', '2007-11-03');
echo $nb_jours;
31 juil. 2007 à 13:38
qq peut m'envoyer le code de difference de deux timestamp en java.
16 juil. 2007 à 17:06
2 juil. 2007 à 15:04
mais cette fois pour avoir le nombre de secondes entre la date d'aujourd'hui et une date donnée.
car je suis pas sur que se soit possible avec strtotime
$date=date("H-i-s-j-M-Y");
$date2=("15-05-30-04-07-2007");
$nbsecondes = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1);
Je sais que mon code est faux, peut-on m'éclairer si possible ? Merci
22 juin 2007 à 01:24
14 juin 2007 à 04:54
11 mai 2007 à 12:07
<?php
$date1 = "27 March 2005";
$date2 = "28 March 2005";
echo $nbjours = floor((strtotime($date2) - strtotime($date1))/(60*60*24));
echo '
';
echo $nbjours = round((strtotime($date2) - strtotime($date1))/(60*60*24)-1);
?>
Il faut donc rajouter au moins 1 heure en secondes lors de la soustraction des 2 dates pour tomber dans le bon jour lors du changement d'heure en heure d'été :
<?php
$date1 = "27 March 2005";
$date2 = "28 March 2005";
echo $nbjours = floor((strtotime($date2) - strtotime($date1)+60*60*1)/(60*60*24));
?>
24 avril 2007 à 08:53
25 sept. 2006 à 15:22
$nbjours = floor((strtotime($date1) - strtotime($date2))/(60*60*24));
Plus court, plus rapide et plus lisible... J'avoue qu'il y a des choses plus importantes à optimiser, mais c'était mes deux centimes ;-)
4 sept. 2006 à 13:38
25 nov. 2005 à 14:22
$date1=date("Y-m-d"); // date du jour
//$date1=20051231; // si on choisit de partir d'une date fixe AAAAMMJJ
$date2=20080301; // date cible à renseigner
$nbday = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1); // nb jours
if ($nbday < 45) {
$nbmonth = round(($nbday)/7/4); // affiche les mois restant
echo $nbmonth;
}
else {
echo $nbday; // affiche les jours restant
25 nov. 2005 à 14:22
$date1=date("Y-m-d"); // date du jour
//$date1=20051231; // si on choisit de partir d'une date fixe AAAAMMJJ
$date2=20080301; // date cible à renseigner
$nbday = round((strtotime($date1) - strtotime($date2))/(60*60*24)-1); // nb jours
if ($nbday < 45) {
$nbmonth = round(($nbday)/7/4); // affiche les mois restant
echo $nbmonth;
}
else {
echo $nbday; // affiche les jours restant
6 juil. 2005 à 16:27
Si vous calculez le nombre de secondes en le 28/03/2005 - 0:0:0 et le 27/03/2005 - 0:0:0 vous obtiendrez 82800 et non 86400.
Et 82800 = 86400 - 3600. C'est-a-dire 1 heure.
6 juil. 2005 à 08:50
Pour la France par exemple, elle ne prend en compte les changements d'heure (ete, hiver). Le calcul se basant sur le nombre de secondes (60*60*24 = 86400) dans une journee fausse le resultat.
Encore une petite remarque sur le calcul du nombre de lundi, qui posera probleme lorsque le calcul sera a cheval sur 2 annees.
24 juin 2005 à 09:42
------------------------------------------------------------------
if ($start_month(mois selectionner)> date("m")+1
{
alert( <?php echo $voca['you_have_not_entered'] . '\n' . $vocab['valid_time_of_day'] ?>);
return false;
}
------------------------------------------------------------------
Merci d avance
16 juin 2005 à 08:29
echo strftime("%W", $intDateFin) - strftime("%W", $intDateDebut);
%W - numéro de semaine dans l'année, en considérant le premier lundi de l'année comme le premier jour de la première semaine.
Ca me parait bien...
;-)
15 juin 2005 à 16:36
Et en une ligne, est ce que tu peux me dire comment calculer le nombre de lundi entre deux dates? (c'est pour calculer le nombre de semaines commençant par un lundi entre deux dates)...
Merci ;-)
5 déc. 2004 à 08:27
3 nov. 2004 à 21:29
Le manuel php dit ceci :
********************
strtotime
(PHP 3>= 3.0.12, PHP 4 , PHP 5)
strtotime -- Transforme un texte anglais en timestamp
Description
int strtotime ( string time [, int now])
strtotime() essaye de lire une date au format anglais dans la chaîne time, et de la transformer en timestamp UNIX, relativement au timestamp now, ou à la date courante si ce dernier est omis. En cas d'erreur, -1 est retourné.
Comme strtotime() suit la syntaxe de date GNU, vous pouvez lire le manuel GNU intitulé Date Input Formats. Ci-dessous, vous trouverez une syntaxe valide pour le paramètre time.
Exemple 1. Exemple avec strtotime()
<?php
// l'exemple n'est pas traduit, car cela ne fonctionne qu'en anglais
echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";
?>
Exemple 2. Vérification des erreurs avec strtotime()
$str = 'Pas une bonne date';
if (($timestamp strtotime($str)) -1) {
echo "La chaîne ($str) est bogus";
} else {
echo "$str == ". date('l dS of F Y h:i:s A',$timestamp);
}
Note : L'intervalle de validité d'un timestamp va du Vendredi 13 Décembre 1901 20:45:54 GMT au Mardi 19 Jan 2038 03:14:07 GMT : cela correspond aux dates maximales et minimales pour un entier de 32 bits signé.
3 nov. 2004 à 21:22
vraiment la source est tres pratique, j'ai juste une question : si je veut par exemple le nombre de jour entre deux dates dont le format est AAAA-MM-JJ doit je les convertir? est comment ?
cordialement
3 nov. 2004 à 20:50
26 oct. 2004 à 08:50
merci...