使用 GNU 日期获取特定日期之前的星期五

问题描述 投票:0回答:2

使用 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

关于如何做到这一点有什么想法吗?如果不可能使用一行代码,几行脚本也会有所帮助。

bash date gnu
2个回答
5
投票

丑陋,但一行:

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 天”,其中 x 是距离上周五的天数。

我不喜欢它重复日期字符串,但希望它能有所帮助。


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"
© www.soinside.com 2019 - 2024. All rights reserved.