是否有任何內置函數可以使用bash shell腳本從給定日期獲取下個星期日(下週一,週二等)? 例如,2014年9月1日之後的第一個星期天是什麼時候?我期待2014年9月7日。在給定日期(bash)後獲取下一個星期日
我已經在谷歌搜索答案,但只找到此功能:
date "+%Y%m%d" -d Sun
這是旁邊今天是星期天后得到的。
是否有任何內置函數可以使用bash shell腳本從給定日期獲取下個星期日(下週一,週二等)? 例如,2014年9月1日之後的第一個星期天是什麼時候?我期待2014年9月7日。在給定日期(bash)後獲取下一個星期日
我已經在谷歌搜索答案,但只找到此功能:
date "+%Y%m%d" -d Sun
這是旁邊今天是星期天后得到的。
我怕date
不能直接做。但是你可以用括號展開,從他們那裏得到的日期爲所有隨後的7日內,選擇星期日:
echo '1-Sep-2014\ +'{1..7}'\ days' | xargs -n1 date -d | grep Sun
你可以使用這個小腳本:
#!/bin/bash
w=$(date -d"$1" +%w)
diff=$(((7-$w)%7))
date -d"+$diff day $1" +%F
保存爲sun.sh
則:
kent$ ./sun.sh 01-Sep-2014
2014-09-07
kent$ ./sun.sh 31-Aug-2014
2014-08-31
kent$ ./sun.sh 3-Sep-2014
2014-09-07
kent$ ./sun.sh 23-Sep-2014
2014-09-28
請注意,參數驗證沒有完成,我只是展示瞭如何計算日期。
這很好。請注意,如果您使用的是unix系統,請確保您有GNU日期。 'brew install coreutils'的自制解決方案將導致'gdate'調用GNU date。 – PhysicalChemist 2014-09-26 18:50:08
很棒的回答,@choroba :)。順便說一下,是否可以將日期(2014年9月1日)和日期(日)進行參數化。我試過這段代碼,但返回錯誤:'echo'$ myDate \ +'{1..7}'\ days'| xargs -n1 date -d | grep $ myDay' – nurandi 2014-09-29 01:17:57
我把第一個報價放在錯誤的位置。它現在可以工作:'echo $ {myDate}'\ +'{1..7}'\ days'| xargs -n1 date -d | grep $ myDay' – nurandi 2014-09-29 01:29:06