Shell unix - Manipulation date [Résolu/Fermé]

Signaler
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
-
 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

Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
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 ?
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
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
C'est bon j'ai trouvé un moyen d'arriver à mes fins.
Merci
merci d'avance de proposer la solution retenue.
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...