使用GNU date命令行实用程序,我知道:
如何从任何给定日期减去3天:
date -d "20110405 -3 days" "+%Y%m%d"
20110402
如何从今天开始上周五:
date -d "last friday" "+%Y%m%d"
20110408
但我不知道如何在任何特定日期获得上周五:
date -d "20110405 last friday" "+%Y%m%d"
只需返回给定日期:
20110405
关于如何做到这一点的任何想法?如果不能使用单行代码,那么几行脚本也会有所帮助。
答案 0 :(得分:4)
丑陋,但有一句话:
<击> date -d "20110405 -2 days -$(date -d '20110405' '+%w') days" "+%Y%m%d"
击>
编辑:见评论。
date -d "20110405 -$(date -d "20110405 +2 days" +%u) days" "+%Y%m%d"
说明:
我不喜欢它重复日期字符串,但希望它可以帮助。
答案 1 :(得分:2)
脚本示例(基于接受的答案)
DT="20170601"
# get the Friday before $DT
# expected value is 20170526
date -d "$DT -`date -d "$DT +2 days" +%u` days" "+%Y%m%d"
更多示例,使用GNU日期的未记录功能(来自unix.com)
# assign a value to the variable DT for the examples below
DT="2006-10-01 06:55:55"
echo $DT
# add 2 days, one hour and 5 sec to any date
date --date "$DT 2 days 1 hour 5 sec"
# subtract from any date
date --date "$DT 3 days 5 hours 10 sec ago"
date --date "$DT -3 days -5 hours -10 sec"
# or any mix of +/-. What will be the date in 3 months less 5 days?
date --date "now +3 months -5 days"