2013-08-12 29 views
22

Voglio sottrarre "numero di giorni" da una data in bash. Sto provando qualcosa di simile ..sottrarre giorni da una data in bash

echo $dataset_date #output is 2013-08-07 

echo $date_diff #output is 2 

p_dataset_date=`$dataset_date --date="-$date_diff days" +%Y-%m-%d` # Getting Error 

risposta

29

Si sta specificando la data in modo errato. Invece, dicono:

date --date="${dataset_date} -${date_diff} day" +%Y-%m-%d 

Se avete bisogno di memorizzare in una variabile, utilizzare $(...):

p_dataset_date=$(date --date="${dataset_date} -${date_diff} day" +%Y-%m-%d) 
+0

ho dovuto modificare questo a '$ data "--date = $ {} dataset_date - $ {} date_diff 1 giorno" +% Y% m% d 'per sottrarre effettivamente la data ... altrimenti avrebbe aggiunto un giorno. C'è qualcosa che ho perso? – Max

+0

@x_mtd Sì, è necessario impostare la variabile 'date_diff'. Impostalo sul numero di giorni che vuoi sottrarre. – devnull

+0

Un leggero miglioramento del comando - date --date = "$ {dataset_date} - $ {date_diff} giorno" +% Y-% m-% d. Giusto per rendere più chiaro che il parametro --date è un'opzione per il comando date e le doppie virgolette vengono utilizzate per rappresentare correttamente la STRING passata all'opzione --date. – anuragw

3

Per me, ha più senso se metto le opzioni al di fuori (più facile da gruppo), nel caso volessi più di loro.

date -d "$dataset_date - $date_diff days" +%Y-%m-%d 

Dove:

1. -d --------------------------------- options, in this case 
             followed need to be date 
             in string format (look up on $ man date) 
2. "$dataset_date - $date_diff days" -- date arithmetic, more 
             have a look at article by [PETER LEUNG][1] 
3. +%Y-%m-%d -------------------------- your desired format, year-month-day 
0

Di seguito il codice dà si data uno giorno meno

ONE=1 
dataset_date=`date` 
TODAY=`date -d "$dataset_date - $ONE days" +%d-%b-%G` 
echo $TODAY 
3

Ecco la mia soluzione:

echo $[$[$(date +%s)-$(date -d "2015-03-03 00:00:00" +%s)]/60/60/24] 

Calcola il numero di giorni tra ora e 2015-03-03 00:00:00

Problemi correlati