Shell unix - Manipulation date

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
 McFred -
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. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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
  2. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    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 ?
    0
  3. McFred
     
    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
    0
  4. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    C'est bon j'ai trouvé un moyen d'arriver à mes fins.
    Merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nidan
     
    merci d'avance de proposer la solution retenue.
    0
  7. McFred
     
    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...
    0