non, et non.
mais montres-nous donc ton script, car ce que nous avons montré fonctionne correctement; donc, peut-être dans ton script est-ce mal utilisé...
Version imprimable
non, et non.
mais montres-nous donc ton script, car ce que nous avons montré fonctionne correctement; donc, peut-être dans ton script est-ce mal utilisé...
bonjour N_bah,
Ci-dessous tu trouveras deux scripts, mais aucun ne fonctionne, (un avec et l'autre sans la valeur seconde)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #!/bin/bash dateDiff(){ d1=$(date -d "$1" +%s) d2=$(date -d "$2" +%s) result=$(date -d "1970-01-01 UTC $((d1-d2)) seconds" +"%j") echo $((datediff $d1 $d2) * 2)) } if [ $# -ge 2 ]; then # Si deux paramètres passés au script d1=$1 d2=$2 else echo "Saisir les dates d1 et d2 :" read d1 read d2 fi dateDiff $d1 $d2
Code:
1
2
3
4
5
6
7
8
9
10
11 #!/bin/bash if [ $# -lt 2 ] then echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :" read d1 read d2 set -- $d1 $d2 fi echo $(( ( $(date -d "$1" +%s) - $(date -d "$2" +%s) ) / 86400 *2)) You have new mail in /var/spool/mail/userexp
Voila en attendant ta réponse car moi je sèche.
Bon reveillon !!!!
dans le premierc'est tout.Code:
1
2
3
4
5 dateDiff(){ d1=$(date -d "$1" +%s) d2=$(date -d "$2" +%s) date -d "1970-01-01 UTC $((d1-d2)) seconds" +"%j" }
et dans le deuxième, il manque peut-être une paire de parenthèse :Code:echo $(( ( ( $(date -d "$1" +%s) - $(date -d "$2" +%s) )/ 86400 )* 2 ))
Bonjour, peux-tu répondre à la question ci-dessous?
Merci d'avance.
20121007 et de 1
20121006 et de 2
20121005 et de 3
20121004 et de 4
20121003 et de 5
20121002 et de 6
20121001 et de 7
ce qui nous fait donc 14 (2x7)
20120710 et de 1
20120709 et de 2
20120708 et de 3
20120707 et de 4
20120706 et de 5
20120705 et de 6
20120704 et de 7
20120703 et de 8
20120702 et de 9
ce qui nous fait donc 16 (2x8)... POURQUOI 16????
Peux-tu répondre à la question ci-dessus?
Merci d'avance.
Merci de ton retour Jack, en modifiant le script (ci-dessous) je m’aperçois que j'obtiens d'autre résultats
1) Résultat pour la date 20121007 20121001, l’écart est de 12 moi je veux 14
2) Résultat pour la date 20120710 20120702, l’écart est de 16 c'est bien ce que je veux
3) Résultat pour la date 20120101 20110704, l’écart est de 362 moi je veux 364
Le problème c'est inversé visiblement j'ai le bon nombre pour le résultat 2 mais plus pour les résultats 1 et 3 car j'avais respectivement 14 et 364)
Code:
1
2
3
4
5
6
7
8
9
10 #!/bin/bash if [ $# -lt 2 ] then echo "Saisir les dates d1 (date + récente) et d2 (date + ancienne) au format aaaammjj :" read d1 read d2 set -- $d1 $d2 fi echo $(( ( ( $(date -d "$1" +%s) - $(date -d "$2" +%s) )/ 86400 )* 2 ))
Salut bomonde,
Dis, t'es bouché ou tu le fait exprès ?
Ça fait 4 ou 5 fois qu'on te demande de répondre à la question posée par N_BaH ici même et que tu n'y réponds pas !
Peux-tu faire faire un effort en ce début d'année, et prendre comme résolution de bien vouloir éclairer nos lanternes en nous donnant une explication un tant soit peu logique ?
Je t'en remercie par avance ;)
J'ai l'impression que:
- il ouvre la discussion,
- il ne regarde que l'auteur du dernier message,
- il répond "merci de ton retour" sans lire ni le contenu ni les messages précédents (auxquels il n'a aucune intention de répondre),
- il continue son délire en bidouillant son script et en espérant (par miracle?) obtenir les résultats spécifiés dans son message et auquel j'ai (brillamment (et définitivement)) répondu dans mon message!!!
En tout cas, si c'est un bot, j'aimerais en connaître l'auteur pour le féliciter! :ccool:
car il nous a bien fait marcher!!! :mouarf:
il semblerait que quelqu'un l'a déjà fait sans l'en avertir...Citation:
«Qu'on lui coupe la tête!» hurlait la reine.
du coup, il court comme un poulet décapité...
d'œufs et d'œufs ? d'œufs et d'œufs ?
d'œufs et d'œufs font cot .
Messieurs un peu de calme entamons l’année 2013 dans la sérénité surtout que le poulet à la tete dur :o)
une toute petite question qui peut avoir (ou non) une importance pour la création de se script.
:"le fait de diviser les jours par 86400 (nbre de seconde par jour) ne pourrait pas pour certaines dates ne pas tomber sur des jours "entiers" se qui expliquerait les différences?"
N'oubliez pas que je suis néophyte en scripting et essaie au mieux de répondre à vos interrogations...
Merci.
Bonjour,
J'ai trouver ce fil très instructif :lol:
Personnellement, je ne vois que 2 solutions:
Soluce 1) considérer ce fil HS et le diriger vers le forum algo :aie:
Soluce 2) proposer une formule du genre:
ce qui donne:Code:echo $(( ( ( ( $(date -d "$((( $D1 + 1 ) & -2 ))" +%s) + 1 ) - $(date -d "$D2" +%s) )/ 86400 )* 2 ))
Qui pour son cas fonctionne :lol: :lol: :lol:Code:
1
2
3
4
5
6 $ D1=20121007 ; D2=20121001 ; echo $(( ( ( ( $(date -d "$((( $D1 + 1 ) & -2 ))" +%s) + 1 ) - $(date -d "$D2" +%s) )/ 86400 )* 2 )) 14 $ D1=20120710 ; D2=20120702 ; echo $(( ( ( ( $(date -d "$((( $D1 + 1 ) & -2 ))" +%s) + 1 ) - $(date -d "$D2" +%s) )/ 86400 )* 2 )) 16 $ D1=20120101 ; D2=20110704 ; echo $(( ( ( ( $(date -d "$((( $D1 + 1 ) & -2 ))" +%s) + 1 ) - $(date -d "$D2" +%s) )/ 86400 )* 2 )) 364
Cordialement.
soit. ça retourne le résultat attendu avec les données fournies.
mais
pourquoi passer par une opération binaire ?
pourquoi -2 ?
Si tu regarde les 3 date en D1, il y a les 2 "fausses" aux quelles il faut rajouter 1 pour que le résultat soit bon. On peut voir aussi que ces 2 dates représentent un nombre impaire donc quand on leur rajoute 1 ces nombre deviennent pair.
Pour la date D1 qui est initialement bonne, elle est pair donc en rajoutant 1 elle devient impaire.
Et donc le but de l'operation binaire "& -2" est là pour mettre à 0 le bit de plus faible poids, ce qui ne change rien pour les 2 date impairs devenu pair suite au +1 mais qui "en gros" force un -1 uniquement pour la date pair (initialement bonne) devenu impair suite au +1.
En espérant être clair dans l'explication.
Cordialement.
bon; c'est bien.
je reste perplexe devant le cahier des charges.
s'il s'agit effectivement de considérer que les dates sont (im)paires, il y a plus simple : observer le modulo d'une division par 2EDIT:Code:echo $(( ( $(date -d "$(( D1%2 ? D1+1 : D1 ))" +%s) - $(date -d "$D2" +%s) )/86400*2 ))
:koi:
me vient un gros doute : et si D1 est le 31 ?
ça ne fonctionne plus !
Ce n'est alors probablement pas la solution. :(
désolé, c'était bien vu.
A ce que j'ai pu lire le cahier des charges ne concerne que 3 paires de date.
Donc la solution de Jack-ft, la tienne avec le modulo ainsi que la mienne fonctionne.
Quand bomonde se décidera à nous en dire plus sur le cahier des charges...on reverra nos copies. :)
Je propose d'ouvrir un vote.
D'après vous, quelles sont la ou les hypothèses la plus probable et la moins probable parmi:
#1 bomonde essaie toutes les valeurs entières proches de 86400 pour obtenir le "bon" résultat
#2 bomonde a lu tous les posts et a tout compris, mais il n'ose plus s'exprimer
#3 bomonde a lu tous les posts, mais il n'a toujours pas compris pourquoi il n'obtient pas le bon résultat
#4 bomonde utilise sa dernière version du script malgré les erreurs qui se produisent pour certaines dates et il est passé à autre chose
#5 bomonde attend le 10 juillet prochain pour voir ce que va faire son script
#6 bomonde est en train de rédiger des spécifications précises, mais ça prend plus de temps que prévu car la formule décrivant le nombre de jours ne marche pas comme elle devrait et il veut d'abord la corriger avant de la publier
#7 bomonde essaie de recoder son script en perl ou en python afin de pouvoir bénéficier des flottants et affiner sa recherche sur la bonne valeur de 86400 (il est actuellement en train d'explorer la plage [86402.56 86402.57])
#8 bomonde ouvre de temps en temps le dernier message de cette discussion, mais il n'y trouve pas la bonne valeur de 86400 et ne voit donc pas la nécessité d'en remercier l'auteur
#9 bomonde essaie de polluer un autre forum de développeurs car ici il est grillé
#10 bomonde est un bot et il a été désactivé
#11 bomonde n'est plus de ce monde
#12 autre... Veuillez préciser
PS: je ne sais pas créer un sondage sous developpez.com mais si vous avez d'autres hypothèses, elles sont bienvenues :D