Fonction GetDate, qui peut m'aider :-(

Résolu/Fermé
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 10 nov. 2009 à 10:26
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 - 12 nov. 2009 à 15:31
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" ????

18 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 10:36
Salut,

Et un simple :

date --date='7 days ago' '+%Y%m%d'

Ne fait pas l'affaire ?
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 10:58
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" :-(
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 11:00
jp@MDK:~/tmpfs ssh$ D=$(/bin/date -d '7 days ago' +'%Y%m%d')

jp@MDK:~/tmpfs ssh$ echo $D
20091103

jp@MDK:~/tmpfs ssh$

;-))
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 11:13
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 ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 11:26
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 11:43
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 ...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 11:49
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 ?
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 11:54
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 ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 11:58
Affiche le contenu de $TZ :

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...
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 12:03
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 :-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 12:17
Essaie comme ça :

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...
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
10 nov. 2009 à 13:26
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
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
10 nov. 2009 à 15:15
voilà le résultat :
date : TZ = MET
20091110
TZ vaut MET
zone1 =
zone2 =
localOffset = 0
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 15:17
C'est pas mieux ;-((

Mieux vaut alors te tourner vers la solution donnée au post #12 par dubcek ;-)
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
10 nov. 2009 à 19:00
Bonjour,

> 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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2009 à 19:06
Salut bobby,

Le problème c'est qu'il n'y a pas l'option "-d" sur les système Unix ;-((
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
10 nov. 2009 à 19:09
Hello,

Ha oui .../bin/date: illegal option -- d

désolé !

:-(

0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014
10 nov. 2009 à 19:10
Y'a pô d'mal ;-)
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
12 nov. 2009 à 10:29
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à :-(
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 nov. 2009 à 11:44
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
12 nov. 2009 à 11:46
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)'
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 nov. 2009 à 11:55
Tu remplace le dernier chiffre de "localtime(time()-3600*24*7)" par le chiffre correspondant au nombre de jours que tu veux soustraire.

L'exemple reprenait ta demande initiale, moins sept jours !
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
12 nov. 2009 à 11:55
+- 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
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
12 nov. 2009 à 13:53
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 ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 nov. 2009 à 14:00
M'est d'avis que :

print strftime "%Y%m%e\n"

Devrait le faire...
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
12 nov. 2009 à 14:09
ou "%Y%m%d\n"

il n'y a pas différence entre les 3 commandes perl, quelle est l'erreur ?
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
12 nov. 2009 à 15:31
strftime "%Y%m%d" fonctionne ! merci à tous
0