Shell unix - Manipulation date

Résolu/Fermé
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 21 janv. 2013 à 10:33
 McFred - 27 juin 2013 à 15:01
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

remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
21 janv. 2013 à 10:36
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
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
21 janv. 2013 à 11:49
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
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
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 6
21 janv. 2013 à 13:26
C'est bon j'ai trouvé un moyen d'arriver à mes fins.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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