2013-08-12 17 views
22

Chcę odjąć "liczbę dni" od daty w bash. Próbuję czegoś takiego ..odejmowanie dni od daty w 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 

Odpowiedz

29

Niepoprawnie określasz datę. Zamiast powiedzieć:

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

Jeśli trzeba przechowywać ją w zmiennej, użyj $(...):

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

Musiałem zmienić to na '$ date" --date = $ {dataset_date} - $ {date_diff} 1 dzień "+% Y% m% d 'aby odjąć datę ... inaczej dodalibyśmy jeden dzień. Czy jest coś, co przeoczyłem? – Max

+0

@x_mtd Tak, musisz ustawić zmienną 'date_diff'. Ustaw go na liczbę dni, które chcesz odjąć. – devnull

+0

Bardzo nieznaczne ulepszenie polecenia - date --date = "$ {dataset_date} - $ {date_diff} day" +% Y-% m-% d. Tylko po to, aby było bardziej zrozumiałe, że opcja -date jest opcją polecenia date, a podwójne cudzysłowy są używane do poprawnego przedstawienia parametru STRING przekazanego do opcji --date. – anuragw

3

Dla mnie to ma większy sens jeśli kładę opcje zewnątrz (łatwiejsze do grupy), na wypadek, gdy będę chciał ich więcej.

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

Gdzie:

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

Poniżej kod daje pory jeden dzień mniejsza

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

Oto moje rozwiązanie:

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

Oblicza liczbę dni pomiędzy teraz i 2015-03-03 00:00:00