Shell unix - Manipulation date

Résolu
Bonjour,

J'ai une date au format 01/01/2000.
A cette date j'aimerai lui ajouter 10 ans puis de comparer cette nouvelle date avec la date du jour afin de savoir si la date est passée ou à venir.
Cependant l'ajout de 10 ans ne fonctionne pas, j'ai un message d'erreur me disant date invalide.
Ensuite pour la comparaison je passe les dates en secondes et compare ce nombre .
Cela vous semble-t-il juste ou existe-il un moyen plus simple ?

new_date=$(date "+%d/%m/%Y" -d $DATE -v+10y)

now=date -j -f "%d/%m/%Y" 
this=date -j -f "%d/%m/%Y" $new_date

if [ $now > $this ]
then
echo "date passée"
fi


Par avance merci.

6 réponses

  1. petite rectification pour le calcul de new_date je fais ceci :

    new_date=$(date "+%d/%m/%Y" -d $DATE --date='10years')


    et cela me renvoie la date du jour avec 10 ans de plus
    1. le date invalide n'intervient pas tout le temps.
      J'ai remarquer que l'erreur survenait lorsque les jours sont supérieurs à 12, comme 13/06/2005.
      Pourtant je spécifie bien le format de la date.

      Une idée ?
      1. Si cela peux t'aider

        Mydate=01/01/2000
        # Date mise en seconde
        Mydatesec=$(date -d $Mydate +%s)

        # 10 years = 365*24*60*60*10+ 172800 --> 48 heure ( 29 fevrier et Annee bisextile)
        TenY=315532800

        # On ajoute 10 ans a la date
        let "Mydatesec10y=$Mydatesec+$TenY"

        # Date du jour en seconde
        datejoursec=$(date +%s)

        # R = date de base + 10 ans - Date du jour
        let "R=$Mydatesec10y-$datejoursec"

        echo "Le resultat est $R"

        # Si le resultat est positif
        if [ $R -gt 0 ];then
        let "Plus=$datejoursec+$R"
        echo "Il reste encore jusqu'a $(date -d @$Plus)"
        else
        echo "La date est passee depuis $(date -d @$Mydatesec10y)"
        fi
        1. C'est bon j'ai trouvé un moyen d'arriver à mes fins.
          Merci
          1. C'est ce que j'explique en dessous, il faut travailler avec les secondes.

            La manipulation des dates passent par les secondes (date -d $Mydate +%s)

            En secondes, tu ajoutes, enlèves, compares... etc., puis tu remets les secondes au format date...

            Dans ton cas:

            now=$(date +%s) ( Date du jour en secondes )
            TADATE=$(date -d $DATE) ( Ta date en secondes )
            10Y=315532800 (10 ans en secondes)
            new_date=$($TADATE+$10Y) ( Ta date + 10 ans en secondes )

            if [ $now > $new_date ]

            ......

            j'espère t'avoir été utile...