S'il y a des dates que 2010-06-01 et un autre comme 2010-05-15Shell script pour obtenir la différence en deux dates
Utiliser script shell ou commande date comment obtenir le nombre de jours entre les deux dates
Merci ..
S'il y a des dates que 2010-06-01 et un autre comme 2010-05-15Shell script pour obtenir la différence en deux dates
Utiliser script shell ou commande date comment obtenir le nombre de jours entre les deux dates
Merci ..
En utilisant seulement Arithmétique date et shell:
echo $(($(($(date -d "2010-06-01" "+%s") - $(date -d "2010-05-15" "+%s")))/86400))
Il n'est pas nécessaire d'utiliser '$ (())' deux fois. Utilisez simplement un ensemble de parenthèses de regroupement: 'echo $ ((($ -d" 2010-06-01 "" +% s ") - $ (date -d" 2010-05-15 "" +% s "))/86400)) '(espaces optionnels ajoutés pour l'accentuation et la lisibilité) –
Notez que'% s' est spécifique à la date GNU, il peut donc ne pas être disponible sur les systèmes non Linux. La [FAQ de comp.unix.shell] (http://cfajohnson.com/shell/cus-faq.html # 6) a une longue discussion sur les calculs de date (en gros, c'est dur à moins d'avoir une date GNU). – Gilles
En fait, il y a un plus gros problème: il échoue parfois au printemps ... [Ma réponse explique pourquoi.] (Http://stackoverflow.com/questions/3385003/shell-script-to-get-difference-in-two-dates/3391111 # 3391111) – Gilles
Got it
d1=`date +%s -d $1`
d2=`date +%s -d $2`
((diff_sec=d2-d1))
echo - | awk -v SECS=$diff_sec '{printf "Number of days : %d",SECS/(60*60*24)}'
merci ..
Si vous utilisez '(())', vous pouvez également utiliser '$()' à la place des backticks. De plus, il n'y a pas besoin de mettre quelque chose dans 'awk', il suffit d'utiliser' awk ... 'BEGIN {printf ...}' '. Et vous n'avez pas vraiment besoin d'utiliser 'awk' si c'est juste maths entiers:' echo "Nombre de jours: $ (((d2 - d1)/(60 * 60 * 24)))" ' –
Merci ... .............. – Hulk
Il y a une solution qui presque œuvres: utiliser le format de date %s
de la date GNU, qui imprime le nombre de secondes écoulées depuis le 1970-01-01 00:00. Ceux-ci peuvent être soustraits pour trouver la différence de temps entre deux dates.
echo $((($(date -d 2010-06-01 +%s) - $(date -d 2010-05-15 +%s))/86400))
Mais les écrans suivants 0 dans certains endroits:
echo $((($(date -d 2010-03-29 +%s) - $(date -d 2010-03-28 +%s))/86400))
En raison du temps d'épargne de lumière du jour, il y a seulement 23 heures entre ces temps. Vous devez ajouter au moins une heure (et au plus 23) pour être en sécurité.
echo $((($(date -d 2010-03-29 +%s) - $(date -d 2010-03-28 +%s) + 43200)/86400))
Ou vous pouvez dire date
travailler dans un fuseau horaire sans l'heure d'été.
echo $((($(date -u -d 2010-03-29 +%s) - $(date -u -d 2010-03-28 +%s))/86400))
(Posix dit d'appeler le fuseau horaire de référence est UTC, mais il dit aussi de ne pas compter les secondes sautées, de sorte que le nombre de secondes dans une journée est toujours exactement 86400 dans un GMT + xx fuseau horaire.)
Votre troisième exemple donne réellement '82800' parce que vous avez mal groupé l'expression et que vous ajoutez réellement' 0' en raison de la plus haute priorité de '/', pouvez-vous corriger la faute de frappe? –
jour Gnu sait% j pour afficher le jour de l'année:
echo $(($(date -d 2010-06-01 +%j) - $(date -d 2010-05-15 +%j)))
année-limites de passage donneront des résultats erronés, mais étant donné que vous avez donné les dates fixes ...
OSX date
est différent de GNU date
. Je l'ai eu comme ça dans OSX. Ceci est solution non portable.
start_date=$(date -j -f "%Y-%m-%d" "2010-05-15" "+%s")
end_date=$(date -j -f "%Y-%m-%d" "2010-06-01" "+%s")
echo $((($end_date - $start_date)/(60 * 60 * 24)))
L'idée est toujours la même que dans les autres réponses. Convertir les dates en temps, soustraire et convertir le résultat en jours.
'python -c 'à partir de la date d'importation datetime; print (date (2010, 6, 1) - date (2010, 5, 15)). days'' – jfs