使用 GNU 日期获取特定日期之前的星期五
使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
丑陋,但一行:
date -d "20110405 -2 days -$(date -d '20110405' '+%w') 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.
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.
脚本示例(基于已接受的答案)
进一步的示例,使用 GNU 日期的未记录功能(来自 unix.com)
Script example (based on the accepted answer)
Further examples, using undocumented features of GNU date (from unix.com)