使用GNU日期进行日期计算

| 使用GNU日期命令行实用程序,我知道: 如何从任何给定日期减去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
有关如何执行此操作的任何想法?如果无法使用单行代码,那么使用几行脚本也将很有帮助。     
已邀请:
丑陋,但只有一行:
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\"
说明: %w返回星期几。星期五= 5,所以请再起飞2天以获得正确的抵销。 计算为\“ 20110405 -x days \”,其中x是返回上周五的天数。 我不喜欢它重复日期字符串,但希望它能有所帮助。     
脚本示例(基于接受的答案)
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\"
    

要回复问题请先登录注册