我需要該月前一週的號碼。
在 3 月的第 2 週,前一周將為 1。
我的一週從星期一開始。
WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
我怎麼能從中減去 1 以便得到前一周的值(如果該週等於 1 我有一個例外,所以我不必介意這一點)。
如果能自動辨識只有 4 週的二月,那就太好了。
答案1
如果我沒記錯的話,你的表達式(在這裡稍微重新組織一下)找到對應於當月第一天的周數,對應於今天的周數,並將差值計算為每月的周數?
first=$(date -d "-$(($(date +%d)-1)) days")
weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) ))
如果這是正確的,並且您想要上週的月份,那麼只需將“今天”替換為“7 天前”(在所有地方)即可獲得與那個日期?
now="7 days ago"
first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days")
weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) ))
依賴date
能夠解析“7 天前 - 3 天”等表達式。date +%V
列印週數< 10,並帶有前導零,這將導致它們被解釋為八進制數字,打破08
和09
。加 來10#
強制 bash 採用十進制數字。
取得同月第一天的更短方法:
first=$(date -d "$now" +"%Y-%m-01")
(格式不同,但date
應該能夠解釋。)