我需要检查并获取周末的月末日期,有人可以帮忙吗
答案1
使用 GNU date
:
[[ $(date -d "-$(date +%d)days month" +%u) = [67] ]] && echo 'Month-End falls on weekend'
一般情况下,date -d "-$(date +%d)days month"
是指减去当前月份的天数,再加上一个月的结果;这实际上是:
date -d'-XXX days + 1month'
我们计算并获取XXX
天数date +%d
。
测试2021 年 1 月周末结束:
[[ $(date -d "-$(date +%d)days 3month" +%u) = [67] ]] && echo 'Month-End falls on weekend'
从授权,%u
是星期几的 FORMAT 控件 (1..7); 1 是周一。因此,请根据您所在地区的周末日历更改上面的 6 和 7。
答案2
带壳ksh93
:
month='this month'
month='2020-11'
month='November 2020'
if [[ ${ printf '%(%u)T' "last day in $month"; } = [67] ]]; then
print "Last day in $month falls on a weekend"
fi
使用zsh
shell 检查下个月的第一天是星期日还是星期一:
zmodload zsh/datetime
strftime -s month %Y-%m # this month
month=2020-11 # given month
last_day_on_a_weekend() {
local TZ=UTC0 y m t
y=${1%-*} m=${1#*-}
if (( ++m > 12 )); then
(( y++ )); m=1
fi
strftime -rs t %Y-%m-%d $y-$m-1
strftime -s t %u $t
[[ $t = [71] ]]
}
if last_day_on_a_weekend $month; then
print "Last day in $month falls on a weekend"
fi