|
|
|
|
|
Voir là : http://www.commentcamarche.net/forum/affich-1712417#1
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|
Ben si ça marche, la preuve : En bash [jp@Mandrake jp]$ date --date '1 days ago' mar aoû 2 11:38:36 CEST 2005 On change de shell (la commande est un alias) [jp@Mandrake jp]$ kosh $ date --date '2 days ago' lun aoû 1 11:39:00 CEST 2005 $ date --date '1 days ago' mar aoû 2 11:39:22 CEST 2005;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|
la syntaxe date X days ago n'existe pas sur tous les linux pas du tout sur les unix proprietaires et pas sur tous les BSD non plus !
à proscrire à jamais par concéquence. une des solutions simple : expr `date +%d` - 1 et bien sur si on veut gerer le moi et l'année il faut faire un shellscript qui test si le jour est 0 alors faire cal du moi précédent pour voir si il se fini par 28,29,30,31 et si on est janvier faire année -1 rien de plus simple quoi |
if [ `expr `date +%d` - 1` -le 0 ]; then cal | grep -E "28|29|30|31" | awk ........... fi enfin bref je vais l'ecrire quand même .... |
|
Voila un script qui doit fonctionner :
#!/bin/ksh # set -A DAYS Sat Sun Mon Tue Wed Thu Fri Sat set -A MONTHS Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec # # fonctionne sous Linux # # date -d '1 days ago' # YESTERDAY=$((`date +%d` -1)) MONTH=`date +%m` YEAR=`date +%Y` NDAY=`date +%u` WEEKDAY=${DAYS[`date +%u`]} # if [ $YESTERDAY -eq "0" ]; then # MONTH=$((MONTH-1)) # if [ $MONTH -eq "0" ]; then # MONTH=12 YEAR=$((YEAR-1)) # fi # set `cal $MONTH ${YEAR}` shift $(($# - 1)) YESTERDAY=$1 # fi # TMONTH=${MONTHS[MONTH]} YEAR2=${YEAR##20} # # uncomment next line for debugging # echo ${WEEKDAY} ${YESTERDAY} ${TMONTH} ${YEAR} # echo ${YESTERDAY}${MONTH}${YEAR2} #
|
Bonjour,
On peut aussi convertir la date courante en secondes depuis Epoch, puis soustraire 86400 (24*60*60) au résultat et reconvertir le chiffre obtenu au format de date souhaité. Voir man date, et man strftime pour les formats. Dal |
Sous solaris et HP-UX, il existe une solution plus simple que de creer un script.
Il suffit de jouer avec le fuseau horaire (variable systeme $TZ). Exemple : # echo `TZ=MET+24 date +"%D"` donne: 11/28/05 (nous sommes le 11/29/05) Le « +24 » correspond au nombre d’heures a "retrancher" (+) de l’heure actuelle, si tu veux les ajouter, utilises le - (voir plus bas) Le %D correspond à la mise en forme de la date (cf man date) : mm/dd/yy De la meme facon tu pourrais obtenir la date du lendemain sous le format aaaammjj, par exemple…. #echo `TZ=MET-24 date +"%Y%m%d"` donne : 20051128 ... ou du surlendemain (ne marche que sous solaris): #echo `TZ=MET-48 date +"%Y%m%d"` cette derniere commande ne marche pas sous HP-UX car il semble qu'on ne puisse pas faire plus d'une fois le tour de la terre avec HP :p |
voici la solution à ton problème. ça marche et c'est ksh AIX...
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 } A utiliser en fonction KSH sans modération... Fais toi un Copier/Coller de tous ce qui est en gras...
|
Pour le calcul de la date à J-1, faut pas se prendre la tête:
DATE=$((`/bin/date +'%Y%m%d'` - 1)) La, c'est pour un format YYYYMMJJ, après, faites le à votre sauce! @+
|
Résultats pour [shell/unix] date de la veille
Résultats pour [shell/unix] date de la veille
Résultats pour [shell/unix] date de la veille
Résultats pour [shell/unix] date de la veille
Résultats pour [shell/unix] date de la veille
Résultats pour [shell/unix] date de la veille