DUREE - CALCULE LA DUREE PRÉCISE QUI S'EST ÉCOULÉE ENTRE 2 DATES

osaris Messages postés 3 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 25 août 2003 - 25 août 2003 à 10:58
cs_hubert75 Messages postés 1 Date d'inscription mercredi 16 février 2005 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/16052-duree-calcule-la-duree-precise-qui-s-est-ecoulee-entre-2-dates

cs_hubert75 Messages postés 1 Date d'inscription mercredi 16 février 2005 Statut Membre Derniè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és 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 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és 57 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 26 septembre 2022 1
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és 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 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és 57 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 26 septembre 2022 1
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és 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 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.

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")
}
madiken Messages postés 1 Date d'inscription mardi 2 septembre 2003 Statut Membre Derniè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);

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)
}
iwaweb Messages postés 57 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 26 septembre 2022 1
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és 3 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 25 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 !!)
Rejoignez-nous