Retourner une valeur sur base d'une date

Résolu
Bonjour,
je voudrais trouver une commande ou une fonction qui, sur base d'une valeur qui représente une date au format YYYYMMDD, me retourne cette même valeur mais avec n jour en plus ou en moins.
Exemple:
v=20120210
nbre_jours=5
y=f_Add_Jours $v $nbre_jours
echo "$y"

Je travaille sur un système Solaris et mon shell est CSH.

4 réponses

  1. hello
    en perl
    $ D=20120210 ; J=5
    $ NEWD=$(perl -e 'use Time::Local;use POSIX qw(strftime);print strftime "%Y%m%d\n", localtime(timelocal(0,0,0,substr($ARGV[0],6,2),substr($ARGV[0],4,2)-1,substr($ARGV[0],0,4))+86400*$ARGV[1])' $D $J)
    $ 
    $ echo $NEWD
    20120215
    $ 
    $ J=-5
    $ NEWD=$(perl -e 'use Time::Local;use POSIX qw(strftime);print strftime "%Y%m%d\n", localtime(timelocal(0,0,0,substr($ARGV[0],6,2),substr($ARGV[0],4,2)-1,substr($ARGV[0],0,4))+86400*$ARGV[1])' $D $J)
    $ 
    $ echo $NEWD
    20120205
    $ 
    2
    1. Toi t'es le dieu du Unix !! :-) Un grand merci
      0
  2. Contributeur
    Salut,

    $ date -d '20120210 5 days' '+%Y%m%d'
    20120215
    
    $ date -d '20120210 5 days ago' '+%Y%m%d'
    20120205
    
    $
    0
    1. Cela ne fonctionne pas, j'ai le message d'erreur suivant :

      date: illegal option -- d
      usage: date [-u] mmddHHMM[[cc]yy][.SS]
      date [-u] [+format]
      date -a [-]sss[.fff]

      Comment faites-vous pour affecter le résultat à une variable ?
      Comme ceci ?
      v='date -d '20120210 5 days' +%Y%m%d"'
      0
      1. Contributeur
        Mea culpa, je n'avais pas vu la dernière ligne de ton post ;-(

        Comme dit par "qqchquicommenceparQ", il te faut passer par des programmes externes, ou bien installer une version gnu ;-\
        0
    2. salut,

      eh oui :( UNIX dispose rarement de commande GNU (dont 'date'), et pour les calculs de date sur ces systèmes, il est (à ce que j'ai pu observer) recommandé de passer par des commandes externes, de plus en plus installées en standard, telles que awk, perl
      0