2011-01-13 21 views
8

Ho una stringa di data che sono in grado di analizzare e formattare con il comando date da uno script bash.Data relativa Bash (x giorni fa)

Ma come posso determinare quanti giorni fa questa data era dal mio script? Mi piacerebbe finire con un numero.

risposta

6

Si possono fare alcune aritmetica data:

DATE=01/02/2010 
echo $((($(date +%s) - $(date -d "$DATE" +%s)) /(24 * 60 * 60))) 
+1

Vale la pena ricordare qui che la versione di data in AIX non dispone di un'opzione -d, quindi anche se il PO è stato chiesto per una soluzione Linux, questo non sarebbe un cross- soluzione di piattaforma. – frankster

+0

Su OSX le pagine man dicono: '-d dst Imposta il valore del kernel per l'ora legale. – andsens

4

convertire la data e l'ora in secondi da epoch, sottrarre, dividere per il numero di secondi in un giorno:

#!/bin/bash 

((a = `date -d "Wed Jan 12 02:33:22 PST 2011" +%s`)) 
((b = `date +%s`)) 
echo $(((b-a)/(60*60*24))) 
+5

In una nota a margine, puoi fare le date relative in' date' direttamente: 'date --date =" 2011-01- 13 + 5days "' – l0b0

+0

Neat! :) Grazie. Ma ciò è utile solo se stai mirando a un numero specifico di giorni diverso da una determinata data, senza trovare la differenza tra due date date. – sarnold

+1

Non è necessario eseguire un semplice assegnamento all'interno di doppie parentesi (non sarebbe comunque possibile avere spazi attorno al segno di uguale). Dovresti, comunque, usare '$()' per la sostituzione di comando invece di usare i backtick. –

2

Utilizza la data stesso come valore di data per la data. Esempio 5 giorni fa:

date -d "`date`-5days" 
+1

Non è necessario aprire una subshell: 'date -d" -5days "' è la stessa cosa :) – neurino