在给定日期(bash)之后的下一个星期天

时间:2014-09-26 16:16:42

标签: bash shell unix

是否有任何内置函数可以使用bash shell脚本从给定日期获取下周日(下周一,周二等)? 例如,2014年9月1日之后的第一个星期日是什么时候?我期待2014年9月7日。

我在谷歌搜索了答案,但只发现了这个功能:

date "+%Y%m%d" -d Sun

这是今天下个星期天之后。

3 个答案:

答案 0 :(得分:2)

我担心date不能直接这样做。但您可以使用大括号扩展来获取接下来7天的所有日期,并从中选择星期日:

echo '1-Sep-2014\ +'{1..7}'\ days' | xargs -n1 date -d | grep Sun

答案 1 :(得分:1)

您可以使用这个小脚本:

#!/bin/bash
w=$(date -d"$1" +%w)
diff=$(( (7-$w)%7 ))
date -d"+$diff day $1" +%F

保存为sun.sh然后:

kent$  ./sun.sh 01-Sep-2014
2014-09-07

kent$  ./sun.sh 31-Aug-2014
2014-08-31

kent$  ./sun.sh 3-Sep-2014   
2014-09-07

kent$  ./sun.sh 23-Sep-2014
2014-09-28

请注意,参数验证没有完成,我只是展示了如何计算日期。

答案 2 :(得分:0)

您的概念是正确的,只需提供所需的日期作为-d选项的参数即可。

date "+%Y%m%d" -d "2014-09-07 Sun"

此解决方案比其他解决方案更短,更容易。

脚本中的内容相同

$ cat sun.sh
#!/bin/bash
date "+%Y%m%d" -d "$1 Sun"
$ ./sun.sh 7-Sep-2014
20140907