在 bash 中获取上周的数字

在 bash 中获取上周的数字

我需要该月前一周的号码。

在 3 月的第 2 周,前一周将为 1。在 4 月的第一周,前一周将为 5。

我的一周从星期一开始。

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应该能够解释。)

相关内容