Rechercher : dans
Par :

Fonction GetDate, qui peut m'aider :-(

Dernière réponse le 12 nov 2009 à 15:31:36 OlivrT, le 10 nov 2009 à 10:26:39 
 Signaler ce message aux modérateurs

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" ????

Configuration: Windows XP Internet Explorer 6.0

Meilleures réponses pour « Fonction GetDate, qui peut m'aider : ( » dans :
Javascript - Les fonctions Voir La notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
Faire fonctionner une application Windows sous Linux avec Wine VoirWine est un logiciel permettant de faire fonctionner certaines applications Windows sous Linux. Contrairement à VMWare ou VirtualBox, Wine n'émule pas un PC complet, mais seulement les API Win32 (appels système Windows). L'émulation n'est pas...
Vérifier le fonctionnement de son alimentation VoirOn peut tester le fonctionnement d'une alimentation en procédant comme ceci : Mettre l'alimentation sur OFF (derrière la tour). Débrancher celle-ci du secteur et de la carte mère (il est préférable de l'enlever entièrement de la tour en...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Fonctionnement du Bluetooth VoirFonctionnement Le standard Bluetooth, à la manière du WiFi utilise la technique FHSS (Frequency Hopping Spread Spectrum, en français étalement de spectre par saut de fréquence ou étalement de spectre par évasion de fréquence), consistant à découper...

1

jipicy, le 10 nov 2009 à 10:36:15

Salut,

Et un simple :

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

Ne fait pas l'affaire ?
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

2

OlivrT, le 10 nov 2009 à 10:58:12

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" :-(

Répondre à OlivrT

3

jipicy, le 10 nov 2009 à 11:00:21

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$

;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

4

OlivrT, le 10 nov 2009 à 11:13:16

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 ?

Répondre à OlivrT

5

jipicy, le 10 nov 2009 à 11:26:32

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 ?
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

6

OlivrT, le 10 nov 2009 à 11:43:03

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 ...

Répondre à OlivrT

7

jipicy, le 10 nov 2009 à 11:49:59

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 ?
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

8

OlivrT, le 10 nov 2009 à 11:54:30

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 ;-)

Répondre à OlivrT

9

jipicy, le 10 nov 2009 à 11:58:13

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...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

10

OlivrT, le 10 nov 2009 à 12:03:11

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 :-)

Répondre à OlivrT

11

jipicy, le 10 nov 2009 à 12:17:34

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...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

12

dubcek, le 10 nov 2009 à 13:26:22

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

Répondre à dubcek

13

OlivrT, le 10 nov 2009 à 15:15:34

Voilà le résultat :
date : TZ = MET
20091110
TZ vaut MET
zone1 =
zone2 =
localOffset = 0

Répondre à OlivrT

14

jipicy, le 10 nov 2009 à 15:17:43

C'est pas mieux ;-((

Mieux vaut alors te tourner vers la solution donnée au post #12 par dubcek ;-)
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

15

bob031, le 10 nov 2009 à 19:00:10

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/... un penguin sur la banquise !

Répondre à bob031

16

jipicy, le 10 nov 2009 à 19:06:31

Salut bobby,

Le problème c'est qu'il n'y a pas l'option "-d" sur les système Unix ;-((
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

17

bob031, le 10 nov 2009 à 19:09:23

Hello,

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

désolé !

:-(

un penguin sur la banquise !

Répondre à bob031

18

jipicy, le 10 nov 2009 à 19:10:02

Y'a pô d'mal ;-)
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

19

OlivrT, le 12 nov 2009 à 10:29:46

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à :-(

Répondre à OlivrT

20

jipicy, le 12 nov 2009 à 11:44:09

Post #12 !
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

21

OlivrT, le 12 nov 2009 à 11:46:54

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)'

Répondre à OlivrT

22

jipicy, le 12 nov 2009 à 11:55:07

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 !
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

23

dubcek, le 12 nov 2009 à 11:55:53

+- 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

Répondre à dubcek

24

OlivrT, le 12 nov 2009 à 13:53:58

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 ?

Répondre à OlivrT

25

jipicy, le 12 nov 2009 à 14:00:54

M'est d'avis que :

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

Devrait le faire...
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

26

dubcek, le 12 nov 2009 à 14:09:28

Ou "%Y%m%d\n"

il n'y a pas différence entre les 3 commandes perl, quelle est l'erreur ?

Répondre à dubcek

27

 OlivrT, le 12 nov 2009 à 15:31:36

Strftime "%Y%m%d" fonctionne ! merci à tous

Répondre à OlivrT
Collection CommentÇaMarche.net