Fonction GetDate, qui peut m'aider :-(
Résolu
OlivrT
Messages postés
323
Date d'inscription
Statut
Membre
Dernière intervention
-
OlivrT Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
OlivrT Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'utilise la fonction ci-dessous, copiée du net et qui me retourne parfaitement la date de la veille par exemple.
Cela fonctionne si j'enlève jusqu'à 6 jours, si j'enlève 7, la fonctionne me retourne une mauvaise date :-(
Quelqu'un pourrait-il me dire pourquoi ? et me corriger cette fonction ?
Merci d'avance
GetDate()
{ # GetDate nDays [format]
# Exemple d'utilisation: export NAMEDIR=$(GetDate -1 '+%Y%m%d')
typeset -i nDays=$1; format=$2
eval $(echo $TZ | sed '
s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!')
TZ=$zon1$((localOffset-24*nDays))$zon2 date $format
}
Exemple, nous sommes le 02 nov 2009
TODAY=$(GetDate 0 '+%Y%m%d')
echo "Date du jour : $TODAY"
#echo retourne "Date du jour : 20091102"
TODAY=$(GetDate -6 '+%Y%m%d')
echo "Date du jour -6: $TODAY"
#echo retourne "Date du jour : 20091027"
TODAY=$(GetDate -7 '+%Y%m%d')
echo "Date du jour -7: $TODAY"
#echo retourne "Date du jour : 20091102" ????
j'utilise la fonction ci-dessous, copiée du net et qui me retourne parfaitement la date de la veille par exemple.
Cela fonctionne si j'enlève jusqu'à 6 jours, si j'enlève 7, la fonctionne me retourne une mauvaise date :-(
Quelqu'un pourrait-il me dire pourquoi ? et me corriger cette fonction ?
Merci d'avance
GetDate()
{ # GetDate nDays [format]
# Exemple d'utilisation: export NAMEDIR=$(GetDate -1 '+%Y%m%d')
typeset -i nDays=$1; format=$2
eval $(echo $TZ | sed '
s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!')
TZ=$zon1$((localOffset-24*nDays))$zon2 date $format
}
Exemple, nous sommes le 02 nov 2009
TODAY=$(GetDate 0 '+%Y%m%d')
echo "Date du jour : $TODAY"
#echo retourne "Date du jour : 20091102"
TODAY=$(GetDate -6 '+%Y%m%d')
echo "Date du jour -6: $TODAY"
#echo retourne "Date du jour : 20091027"
TODAY=$(GetDate -7 '+%Y%m%d')
echo "Date du jour -7: $TODAY"
#echo retourne "Date du jour : 20091102" ????
A voir également:
- Fonction GetDate, qui peut m'aider :-(
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
18 réponses
je ne suis pas un "champion" en bash .. alors tu excuseras je l'espère mes erreurs, voilà ce que j'ai entré, est-ce correcte ?
D=$((`/bin/date '7 days ago' +'%Y%m%d'`))
echo "Date 7 jours avant : $D"
Cela me retourne "Bad conversion" :-(
D=$((`/bin/date '7 days ago' +'%Y%m%d'`))
echo "Date 7 jours avant : $D"
Cela me retourne "Bad conversion" :-(
Voilà j'ai copié ton code :
~/tmpfs ssh$ D=$(/bin/date -d '7 days ago' +'%Y%m%d')
~/tmpfs ssh$ echo $D
Voici le résultat :
/bin/date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
e.testdate[33]: /home/pirmez/tmpfs: not found
e.testdate[34]: /home/pirmez/tmpfs: not found
Apparement il ne trouve pas le répertoire "tmpfs", c'est quoi ce folder ?
~/tmpfs ssh$ D=$(/bin/date -d '7 days ago' +'%Y%m%d')
~/tmpfs ssh$ echo $D
Voici le résultat :
/bin/date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
e.testdate[33]: /home/pirmez/tmpfs: not found
e.testdate[34]: /home/pirmez/tmpfs: not found
Apparement il ne trouve pas le répertoire "tmpfs", c'est quoi ce folder ?
Ca : "jp@MDK:~/tmpfs ssh$" c'est mon répertoire de travail via "ssh" et "$" mon prompt (invite de commande) ;-\
La commande seule c'est :
D=$(/bin/date -d '7 days ago' +'%Y%m%d')
Par contre le message d'erreur de la commande "date" me fait penser que tu travailles sur un système style Unix ou Solaris, non ?
La commande seule c'est :
D=$(/bin/date -d '7 days ago' +'%Y%m%d')
Par contre le message d'erreur de la commande "date" me fait penser que tu travailles sur un système style Unix ou Solaris, non ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tout à fait, sous Unix.
voilà j'ai codé exactement la ligne que tu as écrite et le résulat est :
/bin/date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
J'ai essayé ceci :
D2=$((`/bin/date -d '7 days ago' +'%Y%m%d'`))
et j'ai le même résultat ...
voilà j'ai codé exactement la ligne que tu as écrite et le résulat est :
/bin/date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
J'ai essayé ceci :
D2=$((`/bin/date -d '7 days ago' +'%Y%m%d'`))
et j'ai le même résultat ...
Du coup je comprends mieux l'intérêt de la fonction de ton 1er post, et apparemment il va falloir faire avec, vu que la commande "date" sur les systèmes Unix est beaucoup plus limitée que sous les distributions GNU/Linux, notamment au niveau des options ;-((
Par contre à quoi correspond la variable "$TZ" dans ta fonction ?
Par contre à quoi correspond la variable "$TZ" dans ta fonction ?
Ben comme je l'ai dit lors de mon premier post, j'ai trouvé cette fonction sur le net.
Il était tout content le Olivier sauf que dans un des programmes je dois aller chercher la date du lundi précédént et paf ça marche plus :-(
Sincèrement j'y comprends quedal moi à cette fonction et je me demande bien pourquoi elle fonctionne jusque -6 et pas -7 ??? C'est pourquoi je fais appel aux spécialistes ;-)
Il était tout content le Olivier sauf que dans un des programmes je dois aller chercher la date du lundi précédént et paf ça marche plus :-(
Sincèrement j'y comprends quedal moi à cette fonction et je me demande bien pourquoi elle fonctionne jusque -6 et pas -7 ??? C'est pourquoi je fais appel aux spécialistes ;-)
Affiche le contenu de $TZ :
Si rien ne s'affiche, rajoute "set -xv" en dessous du shebang de ton script (en dessous de la 1ère ligne qui doit ressembler à un truc du genre #!/bin/sh ) :
Lances le script et affiche la sortie...
echo $TZ
Si rien ne s'affiche, rajoute "set -xv" en dessous du shebang de ton script (en dessous de la 1ère ligne qui doit ressembler à un truc du genre #!/bin/sh ) :
#!/bin/sh set -xv
Lances le script et affiche la sortie...
GetDate()
{ # GetDate nDays [format]
typeset -i nDays=$1; format=$2
eval $(echo $TZ | sed '
s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!')
TZ=$zon1$((localOffset-24*nDays))$zon2 date $format
echo "TZ vaut $TZ"
}
d=$(GetDate 0 '+%Y%m%d')
echo "lundi dernier : $d"
exit
Resultat :
lundi dernier : 20091110
TZ vaut MET
On est dans la 4ème dimensio :-)
{ # GetDate nDays [format]
typeset -i nDays=$1; format=$2
eval $(echo $TZ | sed '
s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!')
TZ=$zon1$((localOffset-24*nDays))$zon2 date $format
echo "TZ vaut $TZ"
}
d=$(GetDate 0 '+%Y%m%d')
echo "lundi dernier : $d"
exit
Resultat :
lundi dernier : 20091110
TZ vaut MET
On est dans la 4ème dimensio :-)
Essaie comme ça :
Ce sera peut être plus explicite...
GetDate() { # GetDate nDays [format] echo "TZ = $TZ" typeset -i nDays=$1; format=$2 eval $(echo $TZ | sed ' s!\([^-0-9]*\)\([-0-9]*\)\(.*\)!typeset -i localOffset=\2;zon1=\1;zon2=\3!') TZ=$zon1$((localOffset-24*nDays))$zon2 date $format echo "TZ vaut $TZ" echo "zone1 = $zone1 echo "zone2 = $zone2 echo "localOffset = $localOffset" } d=$(GetDate 0 '+%Y%m%d') echo "lundi dernier : $d" exit
Ce sera peut être plus explicite...
hello
là où il n'y a pas de commande date GNU on peut utiliser perl
$ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()-3600*24*7)'
Tue Nov 3 13:21:56 2009
là où il n'y a pas de commande date GNU on peut utiliser perl
$ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()-3600*24*7)'
Tue Nov 3 13:21:56 2009
Bonjour,
l'inspiration et une mine d'informations :
http://www.unix.com/answers-frequently-asked-questions/13785-yesterdays-date-date-arithmetic.html
> redfox@mandriva[192.168.1.2]:~$ DATE_STAMP=`TZ=CST date -d '7 days ago' +%y%m%d` > redfox@mandriva[192.168.1.2]:~$ echo $DATE_STAMP 091103 > redfox@mandriva[192.168.1.2]:~$
l'inspiration et une mine d'informations :
http://www.unix.com/answers-frequently-asked-questions/13785-yesterdays-date-date-arithmetic.html
Qui peut alors me donner une fonction qui me retourne x jours en plus ou en moins en rapport avec la date du jour ? Je commence à désespérer là :-(
Merci ... mais euh ça doit ton truc perl machin synthaxiquement :-) ?
j'écris ceci ??
MaDateMoins7Jours=$ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()-3600*24*7)'
j'écris ceci ??
MaDateMoins7Jours=$ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()-3600*24*7)'
+- jours définis dans une variable DAY
$ DAY=7 $ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()+3600*24*$ARGV[0])' -- $DAY Thu Nov 19 11:50:18 2009 $ DAY=-7 $ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()+3600*24*$ARGV[0])' -- $DAY Thu Nov 5 11:50:36 2009 $ MaDateMoins7Jours=$(perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()+3600*24*$ARGV[0])' -- $DAY) $ echo $MaDateMoins7Jours Thu Nov 5 11:53:26 2009
Salut "dubceck"
tout ce que tu as écrit .. ne fonctionne pas, par contre ceci c'est bon :
echo "7 jours en plus : "
DAY=-7
MaDateMoins7Jours=$(perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()+3600*24*$ARGV[0])' -- $DAY)
echo "Date vaudra : $MaDateMoins7Jours"
Encore une petite question, quels arguments dois-je écrire si je désire la date au format YYYYMMDD ?
tout ce que tu as écrit .. ne fonctionne pas, par contre ceci c'est bon :
echo "7 jours en plus : "
DAY=-7
MaDateMoins7Jours=$(perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y\n", localtime(time()+3600*24*$ARGV[0])' -- $DAY)
echo "Date vaudra : $MaDateMoins7Jours"
Encore une petite question, quels arguments dois-je écrire si je désire la date au format YYYYMMDD ?