Commande unix - date de la veille

defre -  
Icarenna Messages postés 147 Statut Membre -
Salut a tous,

Je suis débutant, et je cherche a récuperer, pour les besoin d'un script, la date de la veille (jour de la semaine et jour du mois), j'aimerai savoir si c'était possible avec la commande date...
Sinon comment je pourrai la récupérer ?

Merci d'avance pour votre aide
A bientot
Defre

9 réponses

  1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Essayes voir ce script :

    #!/bin/sh
    
    # ydate: A Bourne shell script that
    # prints yestarday's date
    # Output Form: Month Day Year
    # From Focus on Unix: http://unix.about.com
    
    # Set the current month day and year.
    month=`date +%m`
    day=`date +%d`
    year=`date +%Y`
    
    # Add 0 to month. This is a
    # trick to make month an unpadded integer.
    month=`expr $month + 0`
    
    # Subtract one from the current day.
    day=`expr $day - 1`
    
    # If the day is 0 then determine the last
    # day of the previous month.
    if [ $day -eq 0 ]; then
      
      # Find the preivous month.
      month=`expr $month - 1`  
    
      # If the month is 0 then it is Dec 31 of
      # the previous year.
      if [ $month -eq 0 ]; then
        month=12
        day=31
        year=`expr $year - 1`  
    
      # If the month is not zero we need to find
      # the last day of the month.
      else
        case $month in
          1|3|5|7|8|10|12) day=31;;
          4|6|9|11) day=30;;
          2)
            if [ `expr $year % 4` -eq 0 ]; then
              if [ `expr $year % 400` -eq 0 ]; then
                day=29
              elif [ `expr $year % 100` -eq 0 ]; then
                day=28
              else
                day=29
              fi
            else
              day=28
            fi
          ;;
        esac
      fi
    fi
    
    # Print the month day and year.
    echo $month $day $year
    exit 0


    source : http://unix.about.com/library/weekly/aa070901e.htm
    Jean-François Pillou

    Fondateur de CommentCaMarche.net

    2
    1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
       
      ou en ksh :


      --- cut here for tz.sh ---
      #!/bin/ksh
      # Usage tz.sh N [fmt_string]
      #   Where N is how many days to go backward
      #   fmt_string is optional format arg to date command
      
      days=$1;shift
      
      date "+%H %Z" | read t1 tn
      t0=$(TZ=0 date +%H)
      (( delta = t0 - t1 ))
      (( adjust = delta + 24 * days ))
      
      TZ="$tn$adjust" date "$@"
      
      --- end of tz.sh ---
      
      tz.sh 1   # gives you the date and time 24 hours ago
      tz.sh 1 '+%d'  # gives you just yesterday's day of the month
      tz.sh 1 '+%Y%m%d' # gives you yesterday as yyyymmdd
      tz.sh -1  # gives you tomorrow
      


      source : comp.unix.aix : http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&oe=UTF-8&threadm=d1c185ef.0201230015.4078df0%40posting.google.com&rnum=7&prev=/&frame=on
      0
    2. Icarenna Messages postés 147 Statut Membre 137
       
      Est-il possible de faire en sorte que la date s'affiche sous la forme: 01 02 ... 09
      Ainsi que les jours: 01 02 ... 09???
      0
  2. Icarenna Messages postés 147 Statut Membre 137
     
    Les meilleures de toute les commandes ce sont celles-ci:
    date_hier=$(date --date '1 days ago' +%F) 
    date_hier_jour=$(date --date '1days ago' +%d) 
    date_hier_mois=$(date --date '1days ago' +%m) 
    date_hier_annee=$(date --date '1 days ago' +%Y) 
    date_lettre=$(date --date '1 days ago') 
    
    echo La date en lettre = $date_lettre 
    echo La date de hier m_d_Y = $date_hier 
    echo Le jour de hier= $date_hier_jour 
    echo Le mois de hier= $date_hier_mois 
    echo L\'annee de hier= $date_hier_annee 
    


    Elle fonctionne les années bissextiles, le 01/01/* et le 01/03/* alors moi je dis :
    vive linux!!
    Car la sagesse procure une protection [tout comme] l'argent procure une protection ; mais l'avantage de la connaissance, c'est que la sagesse garde en vie ses propriétaires. - Eccl. 7:12
    1
    1. Nian_nian Messages postés 1 Statut Membre
       
      Suuuuuper!!
      0
  3. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Quel genre de script ? Sous quel Unix ?

    Si tu as GNU date (sous Linux par exemple), c'est simplissime :

    date -d '1 day ago'


    Reste à formatter la sortie selon tes besoins...

    0
    1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
       
      Tant qu'on y est :

      date -d '1 day ago' +%d\/%m

      0
    2. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
       
      En fait en relisant ta demande (jour de la semaine/jour du mois) :

      date -d '1 day ago' +%w\/%d


      Le jour de la semaine est 0 pour dimanche, 1 pour lundi, ... 6 pour samedi. Pour plus d'infos date --help
      0
      1. batmat Messages postés 1880 Date d'inscription   Statut Membre 114 > Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention  
         
        ou encore plus court avec dater --date='yesterday' :-)

        @++

        Vous hésitez entre Linux et Windows ?
        Vous voulez dépenser du temps ou de l'argent ?
        0
    3. IvyAlice Messages postés 397 Statut Membre 32
       
      waw au lieu de se fouler à faire un scripte , un simple paramètre suffit, thx
      0
  4. defre
     
    Je sais pas trop qu'elle unix, c'est un script shell sh.
    date -d ne marche pas...
    0
    1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
       
      J'ai changé le titre de ton message pour que tu aies plus facilement des réponses. Que donne un "uname -a" ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. defre
     
    ca donne AIX...
    j'ai essayé une commande du type
    date "+%d/%m/%Y" --day 1 day ago'
    mais ca marche pas non plus
    0
    1. Icarenna Messages postés 147 Statut Membre 137
       
      C'est parce que c'est
      date --date '1 days ago' +%F 

      (un peu en retard...10 ans plus tard...)
      0
  7. francoispgp
     
    compatibilitee totale en une ligne tout unix et unixlike:

    >date "+%d %m %y" |awk '{print $1-1" "$2" "$3}'
    28 08 03
    0
    1. Pitu Messages postés 1460 Statut Contributeur 125
       
      Sauf si on est le 1er du mois ... ;o(

        (:•Þ   Pitu
      0
      1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308 > Pitu Messages postés 1460 Statut Contributeur
         
        ... et c'est là que tout ce complique, suivant que l'on est en septebmbre, en mai, voire pire en mars, dans une année bissextile ou non....
        0
      2. Pitu Messages postés 1460 Statut Contributeur 125 > Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention  
         
        Et le 1er janvier ? T'as pensé au 1er janvier ... 3000 ?
        Sinon, il y a pas un moyen archi-compliqué à partir du "cal" ?
        (En tout cas, plus compliqué que les scripts que tu as fournis plus haut)

          (:•Þ   Pitu
        Maily, arête de râler !
        0
      3. francoispgp > Pitu Messages postés 1460 Statut Contributeur
         
        mais c'est la seule commande compatibles entre tous les shells....

        la solution est donc si on veut avoir tous les cas pris en compte de travailler depuis le calendrier et non la date.

        ainsi il n'existe plus de problemes de ce type.
        0
  8. defre
     
    C clair que pour le moment j'utilise le premier script de jeff, car on est sur qu'il gère toutes les possibilité, j'y ai ajouté une petite partie pour le jour en caractère mais là c'est + facile...
    on a jamais vu un lundi après un autre jour qu'un dimanche :)
    0
    1. Io)
       
      Faux, la seule méthode pour ne pas se tromper (avec les heures d'ete, les années bissextiles & co) est l'Unixtime.
      0
      1. yhupi > Io)
         
        Script qui gère aussi les années bissextile

        # date au format YYYYMMDD
        DATE_A_CHARGER=$1


        JJ=`echo $DATE_A_CHARGER | cut -c 7-8`
        MM=`echo $DATE_A_CHARGER | cut -c 5-6`
        YY=`echo $DATE_A_CHARGER | cut -c 1-4`

        JJ=$(( JJ - 1 ))
        if (( ! "$JJ" ))
        then
        if "$MM" -eq 1
        then
        YY=$(( YY - 1))
        MM=12
        JJ=31
        elif
        then
        JJ=31
        MM=$(( MM - 1 ))
        elif "$MM" -eq 3
        then
        MY=$(( YY % 4 ))
        "$MY" -eq 0 && JJ=29 || JJ=28
        MY=$(( YY % 100 ))
        "$MY" -eq 0 && JJ=28
        MY=$(( YY % 400 ))
        "$MY" -eq 0 && JJ=29
        MM=02
        elif
        then
        JJ=30
        MM=$(( MM - 1 ))
        fi
        fi

        "${#JJ}" -eq 1 && JJ=0$JJ
        "${#MM}" -eq 1 && MM=0$MM
        "${#YY}" -eq 1 && YY=0$YY


        DATE_A_CHARGER=$YY$MM$JJ

        echo $DATE_A_CHARGER
        0
      2. yhupi > yhupi
         
        pour la gestion des années bissextiles :
        Définition des années bissextiles, petit rapel :-)
        Divisible par 4 mais pas par 100 sauf si divible par 400
        ce script passe l'année 2100 qui n'est pas bissextile

        Attention les "crochets des if" n'apparaissent pas, on peut pas être bon partout ;-)


        # date au format YYYYMMDD
        DATE_A_CHARGER=$1
        
        
            JJ=`echo $DATE_A_CHARGER | cut -c 7-8`
            MM=`echo $DATE_A_CHARGER | cut -c 5-6`
            YY=`echo $DATE_A_CHARGER | cut -c 1-4`
        
            JJ=$(( JJ - 1 ))
            if (( ! "$JJ" ))
            then
                if "$MM" -eq 1
                then
                    YY=$(( YY - 1))
                    MM=12
                    JJ=31
                elif 
                then
                    JJ=31
                    MM=$(( MM - 1 ))
                elif "$MM" -eq 3
                then
                    MY=$(( YY % 4 ))
                    "$MY" -eq 0 && JJ=29 || JJ=28
                    MY=$(( YY % 100 ))
                    "$MY" -eq 0 && JJ=28
                    MY=$(( YY % 400 ))
                    "$MY" -eq 0 && JJ=29
                    MM=02
                elif 
                then
                    JJ=30
                    MM=$(( MM - 1 ))
                fi
            fi
        
            "${#JJ}" -eq 1 && JJ=0$JJ
            "${#MM}" -eq 1 && MM=0$MM
            "${#YY}" -eq 1 && YY=0$YY
        
        
            DATE_A_CHARGER=$YY$MM$JJ
        
        echo $DATE_A_CHARGER
        0
      3. Jack > yhupi
         
        Sinon ça marche chez moi

        en solaris et ksh

        Hier=`TZ=MET+24 date +"%Y%m%d"`
        0
    2. JPP
       
      'TZ=MET+24 date +"%Y%m%d"'
      => OK aussi sous KSH (AIX 5.3)

      Merci bcp !
      0
  9. Apatik Messages postés 6040 Statut Contributeur 789
     
    Ote moi d'un doute Youpi.. 100 c'est pas divisible par 4? Nan parce que au primaire on m'a dit que ça faisait 25.
    Si je ne dis pas de betise, 2008 était bisextile donc 2008, 2012, 2016 et ajoutant 4 à chaque fois, on arrive à 2100. Même que ma calculatrice elle m'a dis que 2100/4 ça faisait 525.
    Enfin je dis ça, j'dis rien moi.. J'ai même pas lu les scripts...
    0
    1. ced
       
      pour Apatik

      Imposée par la réforme du calendrier grégorien en 1582 afin de tenir compte de la durée de révolution de la Terre autour du Soleil : 365,2422 jours. L’année séculaire n’est bissextile que tous les 400 ans. Seules les années séculaires divisibles par 400 sont bissextiles.
      donc 2100, même divisible par 4, n'est pas bissextile car pas divisible par 400...
      moi je dis ça je dis rien... :)
      0