如何计算下周星期一的日期?例如,如果我在这一天有一个变量:
DAYCHECK=2012-10-24
下周一的计算不起作用:
date -d $DAYCHECK -dnext-monday +%Y%m%d
更新:
我已经解决了这个方法:
numdaycheck=`date -d $DAYCHECK +%u`
sum=$((8-$numdaycheck))
date=`date -d "$DAYCHECK $sum days" +%Y%m%d`
如何计算下周星期一的日期?例如,如果我在这一天有一个变量:
DAYCHECK=2012-10-24
下周一的计算不起作用:
date -d $DAYCHECK -dnext-monday +%Y%m%d
更新:
我已经解决了这个方法:
numdaycheck=`date -d $DAYCHECK +%u`
sum=$((8-$numdaycheck))
date=`date -d "$DAYCHECK $sum days" +%Y%m%d`
如果 GNU date
(或任何其他date
)接受“$DAYCHECK 之后的星期一”的某些变体,我还没有看到它。我认为你必须做数学。
$ day_of_week=$( date +%u --date $DAYCHECK) # 1 = Monday, ... 7 = Sunday
$ date --date "$DAYCHECK +$((8-day_of_week)) days"
如果DAYCHECK
已经是星期一,您将获得下一个星期一。如果您愿意DAYCHECK
,则需要单独处理:
$ if (( day_of_week == 1 )); then
> date --date "$DAYCHECK"
> else
> date --date "$DAYCHECK +$((8-day_of_week)) days"
> fi
(不需要回显命令。)
kent$ w=$(date -d2012-10-24 +%u) // here get the weekday index
kent$ echo $w
3
kent$ s=$(((7-$w+2)*3600*24+$(date -d2012-10-24 +%s))) //here get the "next monday" seconds
kent$ echo $s
1351548000
kent$ echo $(date +%Y-%m-%d -d "1970-01-01 UTC $s seconds") //finally we get the date of "next monday"
2012-10-29
所以“ 2012-10-29
”是最终的答案。
这种方式不像chepner的那么简单。我作为另一个答案发布,因为我通常用它进行日期计算。例如,将 5 小时 30 分钟添加到给定日期。只需更改(7-$w+2)*3600*24
部分即可。
希望有一天它可以帮助某人。
next_monday() {
local yi=${1:0:4} mi=${1:5:2} di=${1:8:2}
mi=${mi#0}
di=${di#0}
local yo=$yi mo=$mi do
do=$(cal -m $mi $yi|awk 'c==1{print$1;exit}NR>2&&/'"$di"'/{c++}')
if [ "X$do" = X ];then
((mo=mi+1))
if ((mo>12)); then
((mo=1,yo=yi+1))
fi
do=$(cal -m $mo $yo|awk 'NR>2&&!/^ /{print$1;exit}')
fi
printf "%04d-%02d-%02d\n" $yo $mo $do
}