在 bash 中獲取上週的數字

在 bash 中獲取上週的數字

我需要該月前一週的號碼。

在 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,並帶有前導零,這將導致它們被解釋為八進制數字,打破0809。加 來10#強制 bash 採用十進制數字。

取得同月第一天的更短方法:

first=$(date -d "$now" +"%Y-%m-01") 

(格式不同,但date應該能夠解釋。)

相關內容