DUREE - CALCULE LA DUREE PRÉCISE QUI S'EST ÉCOULÉE ENTRE 2 DATES
osaris
Messages postés3Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention25 août 2003
-
25 août 2003 à 10:58
cs_hubert75
Messages postés1Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 1 avril 2006
-
1 avril 2006 à 09:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_hubert75
Messages postés1Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 1 avril 2006 1 avril 2006 à 09:57
Bonjour,
merci et bravo pour ce script. J'ai cependant remarqué une petite anomalie.
A partir du moment où on a fait une erreur de saisie, exemple j/m/aa, le message d'alerte apparaît bien, on corrige la date dans le format jj/mm/aaaa mais le message d'erreur apparaît toujours.
Il n'y a visiblement pas de réinitialisation des erreurs.
Enfin, ce serait peut-être bien de redonner le focus au champ qui n'est pas valide.
J'ai testé sous IE et sous firefox.
Pour mon usage perso ça va faire l'affaire.
cs_reblochon
Messages postés49Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention27 septembre 2004 21 oct. 2003 à 13:17
Pour finir:
Elle est moins precise car tes arguments de fonction sont:
function calculduree(jourdebut,moisdebut,anneedebut,jourfin,moisfin,anneefin) et donc limités à cela.
Avec la methode que je te montre tu envois deux objet date. Ton objet date peut etre simple new Date(2003,9,21) 21octobre 2003
ou plus precise new Date(2003,9,21,18,30) 21octobre 2003 à 18h30.
Il n'y a pas de limitation pour connaitre tout type d'ecart entre deux dates.
Quand tantot je parlais de milisecondes, ce n'etait pas pour me rendre plus malin que toi, mais c'est ce que retourne la soustraction entre deux objets Date().
Au revoir
Philippe
iwaweb
Messages postés57Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention26 septembre 20221 21 oct. 2003 à 12:46
Ah bon, la mienne est moins précise ? je vois mal pourquoi. Pas besoin de travailler avec des millisecondes pour avoir de la précision.
cs_reblochon
Messages postés49Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention27 septembre 2004 20 oct. 2003 à 22:31
On peu lire dans mon script: match(/^d+/)+
j'ai oublié le backslash (desolé), il fallait lire: match(/^\d+/)+
De toute facon, ca ne sert qu'à enlever la partie decimal du nombre.
Bon maintenant: essayes mon code (corrigé) et essayes le tien, iwaweb. Tu remarqueras que tant que tu n'affiches pas le nombre d'année ecoulées entre les deux dates (comme toi, juste les semaines et les jours), l'importance des annees bissextiles est completement inutiles. En effet, la soustraction entre deux dates retourne les milisecondes en tenant compte deja des annees bissextiles. Donc tant que tu ne veux pas diviser le nombre de jours par 365 ou 366 pour afficher le nombre d'année, ca ne sert à rien de savoir lequelles le sont ou pas.
Laissez l'object "Date" faire son travail de comparaison. Il vous dira (à madiken et à toi) bien plus rapidement et plus surement si une date est:
* bonne ex: 2003fevrier31 [new Date(2003,1,31) => return 2003mars3;] facile à verifier que le gars c'est fourré, tester les mois.
* plus petite d1<d2
* et son ecart avec une autre date. d1-d2
Pour finir tu titres: "la duree precise"... je pense que ma methode ne limite pas la precision. la tienne si. Je ne dis pas ca pour te decourager. Je trouve ca super les gens qui partagent leur code. Et puis si ca se trouve, c'est moi qui me trompe...
bonne journee
Philippe
iwaweb
Messages postés57Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention26 septembre 20221 20 oct. 2003 à 18:14
L'interêt de mon code c'est que ça marche pour les années bissextiles.
cs_reblochon
Messages postés49Date d'inscriptionlundi 28 avril 2003StatutMembreDernière intervention27 septembre 2004 19 oct. 2003 à 22:43
A part le formatage de la date pour l'affichage, le code si dessous ne fait-il pas ce que tu voulais faire... calculer la duree entre deux date??
L'avantage on peut meme rajouter les heures minutes secondes aux dates. Sinon je n'ai pas tout compris. C'est lourd comme code. tu devrais essayer les expressions regulieres pour le formatage.
madiken
Messages postés1Date d'inscriptionmardi 2 septembre 2003StatutMembreDernière intervention 2 septembre 2003 2 sept. 2003 à 15:07
Cette routine semble faire la meme chose à l'aide de la methode parse de l'objet Date :
//--------------------------------
// Compte le nombre de jours entre 2 dates
//--------------------------------
function CountDays(d1,m1,y1, d2,m2,y2){
var D_1 = Number(d1);
var M_1 = Number(m1);
var Y_1 = Number(y1);
var D_2 = Number(d2);
var M_2 = Number(m2);
var Y_2 = Number(y2);
var t = v2 - v1;
var nbjours = t / 1000 / 60 / 60 / 24;
return(nbjours)
}
iwaweb
Messages postés57Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention26 septembre 20221 25 août 2003 à 11:34
Oui, effectivement la version que j'ai distribué sur le site est buggée, je m'étais trompé entre la version corrigée et non corrigée. Je virerais ces bugs bientot. Merci pour ta remarque.
osaris
Messages postés3Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention25 août 2003 25 août 2003 à 10:58
Le script semble très bien cependant il ne fonctionne pas (ou alors très mal !). Prenons l'exemple des deux dates suivantes :
Date début : 12/08/2003
Date fin : 13/08/2003
Les fonctions de vérifications passent sans problème (elles fonctionnent très bien) mais le script renvoi 0 jours ! Ah bon ?
D'avance merci pour une éventuelle correction que tu pourrais apporter (ce message ce veut constructif !!)
1 avril 2006 à 09:57
merci et bravo pour ce script. J'ai cependant remarqué une petite anomalie.
A partir du moment où on a fait une erreur de saisie, exemple j/m/aa, le message d'alerte apparaît bien, on corrige la date dans le format jj/mm/aaaa mais le message d'erreur apparaît toujours.
Il n'y a visiblement pas de réinitialisation des erreurs.
Enfin, ce serait peut-être bien de redonner le focus au champ qui n'est pas valide.
J'ai testé sous IE et sous firefox.
Pour mon usage perso ça va faire l'affaire.
21 oct. 2003 à 13:17
Elle est moins precise car tes arguments de fonction sont:
function calculduree(jourdebut,moisdebut,anneedebut,jourfin,moisfin,anneefin) et donc limités à cela.
Avec la methode que je te montre tu envois deux objet date. Ton objet date peut etre simple new Date(2003,9,21) 21octobre 2003
ou plus precise new Date(2003,9,21,18,30) 21octobre 2003 à 18h30.
Il n'y a pas de limitation pour connaitre tout type d'ecart entre deux dates.
Quand tantot je parlais de milisecondes, ce n'etait pas pour me rendre plus malin que toi, mais c'est ce que retourne la soustraction entre deux objets Date().
Au revoir
Philippe
21 oct. 2003 à 12:46
20 oct. 2003 à 22:31
j'ai oublié le backslash (desolé), il fallait lire: match(/^\d+/)+
De toute facon, ca ne sert qu'à enlever la partie decimal du nombre.
Bon maintenant: essayes mon code (corrigé) et essayes le tien, iwaweb. Tu remarqueras que tant que tu n'affiches pas le nombre d'année ecoulées entre les deux dates (comme toi, juste les semaines et les jours), l'importance des annees bissextiles est completement inutiles. En effet, la soustraction entre deux dates retourne les milisecondes en tenant compte deja des annees bissextiles. Donc tant que tu ne veux pas diviser le nombre de jours par 365 ou 366 pour afficher le nombre d'année, ca ne sert à rien de savoir lequelles le sont ou pas.
Laissez l'object "Date" faire son travail de comparaison. Il vous dira (à madiken et à toi) bien plus rapidement et plus surement si une date est:
* bonne ex: 2003fevrier31 [new Date(2003,1,31) => return 2003mars3;] facile à verifier que le gars c'est fourré, tester les mois.
* plus petite d1<d2
* et son ecart avec une autre date. d1-d2
Pour finir tu titres: "la duree precise"... je pense que ma methode ne limite pas la precision. la tienne si. Je ne dis pas ca pour te decourager. Je trouve ca super les gens qui partagent leur code. Et puis si ca se trouve, c'est moi qui me trompe...
bonne journee
Philippe
20 oct. 2003 à 18:14
19 oct. 2003 à 22:43
L'avantage on peut meme rajouter les heures minutes secondes aux dates. Sinon je n'ai pas tout compris. C'est lourd comme code. tu devrais essayer les expressions regulieres pour le formatage.
salut
Philippe
calculduree(new Date(2003,0,10),new Date(2003,0,17));
function calculduree(d1,d2)
{
if (d2>d1)
{
var msg = "Difference entre " + d1 + " et " + d2 + "
";
msg+= "semaine :"+ ((d2-d1)/604800000).toString().match(/^d+/)+ "
";
msg+= "ou jour :" + ((d2-d1)/86400000).toString().match(/^d+/)+ "
";
msg+= "ou heures :" + ((d2-d1)/3600000).toString().match(/^d+/)+ "
";
msg+= "ou minutes :" + ((d2-d1)/60000).toString().match(/^d+/)+ "
";
msg+= "ou secondes :" + ((d2-d1)/1000).toString().match(/^d+/)+ "
";
alert (msg);
}
else
alert("mauvaise entrée de données")
}
2 sept. 2003 à 15:07
//--------------------------------
// Compte le nombre de jours entre 2 dates
//--------------------------------
function CountDays(d1,m1,y1, d2,m2,y2){
var D_1 = Number(d1);
var M_1 = Number(m1);
var Y_1 = Number(y1);
var D_2 = Number(d2);
var M_2 = Number(m2);
var Y_2 = Number(y2);
if((Y_2 < Y_1) || (Y_1 Y_2 && M_2 < M_1) || (Y_1 Y_2 && M_1 == M_2 && D_2 < D_1))
return -1;
var v1 = Date.parse(Y_1 + "/" + M_1 + "/" + D_1)
var v2 = Date.parse(Y_2 + "/" + M_2 + "/" + D_2)
var t = v2 - v1;
var nbjours = t / 1000 / 60 / 60 / 24;
return(nbjours)
}
25 août 2003 à 11:34
25 août 2003 à 10:58
Date début : 12/08/2003
Date fin : 13/08/2003
Les fonctions de vérifications passent sans problème (elles fonctionnent très bien) mais le script renvoi 0 jours ! Ah bon ?
D'avance merci pour une éventuelle correction que tu pourrais apporter (ce message ce veut constructif !!)