Shell unix - Manipulation date
Résolu
remousse
Messages postés
299
Date d'inscription
Statut
Membre
Dernière intervention
-
McFred -
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 ?
Par avance merci.
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.
A voir également:
- Shell unix - Manipulation date
- Classic shell - Télécharger - Personnalisation
- Classic shell c'est quoi ✓ - Forum Windows 10
- Whatsapp date incorrecte ✓ - Forum Mobile
- Jm date avis - Forum Consommation & Internet
- Airpods 3 date de sortie - Guide
6 réponses
petite rectification pour le calcul de new_date je fais ceci :
et cela me renvoie la date du jour avec 10 ans de plus
new_date=$(date "+%d/%m/%Y" -d $DATE --date='10years')
et cela me renvoie la date du jour avec 10 ans de plus
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 ?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...