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

发布于 2024-10-31 23:13:12 字数 418 浏览 4 评论 0原文

使用 GNU 日期命令行实用程序,我知道:

  • 如何从任何给定日期中减去 3 天:
    日期 -d "20110405 -3 天" "+%Y%m%d"
    20110402

  • 如何获取今天起的最后一个星期五:
    date -d "上周五" "+%Y%m%d"
    20110408

但我不知道如何获取任何给定日期的最后一个星期五:
date -d "20110405 上周五" "+%Y%m%d"
只需返回给定日期:20110405

关于如何执行此操作有什么想法吗?如果不可能只写几行脚本,那么几行脚本也会有所帮助。

Using the GNU date command line utility, I know:

  • how to substract 3 days from any given date:
    date -d "20110405 -3 days" "+%Y%m%d"
    20110402

  • how to get the last Friday from today:
    date -d "last friday" "+%Y%m%d"
    20110408

But I don't know how to get the last Friday from any given date:
date -d "20110405 last Friday" "+%Y%m%d"
Simply returns the given date: 20110405

Any ideas on how to do this? If a one-liner is not possible a few lines of script would also be helpful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

離殇 2024-11-07 23:13:12

丑陋,但一行:

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"

说明:

  • %u 返回星期几 (1-7)。从任意日期减去这么多天数总是会到上一个周日。
  • +2 days 表示我们将减去上周日(即上周五)前 2 天的 %u + 2

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

Ugly, but one line:

date -d "20110405 -2 days -$(date -d '20110405' '+%w') days" "+%Y%m%d"

EDIT: See comments.

date -d "20110405 -$(date -d "20110405 +2 days" +%u) days" "+%Y%m%d"

Explanation:

  • %u returns day of the week (1-7). Subtracting this many days from any date will always take you to the previous Sunday.
  • +2 days means we will be subtracting %u + 2, 2 days before last Sunday, i.e. last Friday.

I don't like that it repeats the date string, but hopefully it goes some way to helping.

我是有多爱你 2024-11-07 23:13:12

脚本示例(基于已接受的答案)

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"

Script example (based on the accepted answer)

DT="20170601"
# get the Friday before $DT
# expected value is 20170526
date -d "$DT -`date -d "$DT +2 days" +%u` days" "+%Y%m%d"

Further examples, using undocumented features of GNU date (from 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"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文