2014-02-12 17 views
0

我寫bash腳本,它將打印的離開從它運行時用戶的生日周,日,小時數的日期(只給出了日期和月份)和今天之間的差別最小。用戶將只填寫他的出生日期和月份。 我搜索,發現,我們可以採取兩個日期差:發現在bash

let DIFF=(`date +%s -d 20150108`-`date +%s -d today`)/86400 
echo $DIFF 

以上腳本將打印留在指定日期的天數。我們可以同樣找出週數和小時數。
但問題是,如果用戶只給出出生日期不含一年,(他在這裏只給出1月8日)我怎麼找出生日即將到來,今天的最小差異可能嗎?
例如,如果生日剛過,那麼我要考慮其自帶明年生日。

+0

自己做功課 – 2014-02-12 20:31:38

回答

0

計算天數的另一種方法是使用date%j格式代碼,該代碼返回年份中的天數(001和366之間的三位數字整數)。 (注:我們預先考慮到1date +%j輸出使它成爲一個四位數的整數開始與0,避免了八進制的轉換。)

DATE="Feb 7" 

TODAY=1$(date +%j) 
BDAY=1$(date +%j -d "$DATE") 
if ((BDAY<TODAY)); then 
    BDAY=1$(date +%j -d "$DATE "$(($(date +%Y)+1))) 
fi 
DAYS_TO_GO=$(($BDAY-$TODAY)) 
1

只是檢查日期今年已經發生,如果沒有追加明年的輸入。

> input="8 Feb" 
> input=$(date -d "$input" '+%d %b') 
> [[ $(date -d "$input" '+%s') -lt $(date -d "$(date '+%d/%m/%y')" '+%s') ]] && input="$input $(($(date '+%Y') + 1))" 
> let DIFF=(`date +%s -d "$input"`-`date +%s -d today`)/86400 
> echo $DIFF 
360 

幾個注意事項。如果用戶輸入的話,第二行將從日期中刪除年份和其他信息(時間等)。第三行中需要$(date -d "$(date '+%d/%m/%y')" '+%s'),因此它僅與當前日期比較,而不是與時間的比較。