如何通过linux date命令根据相对日期获取相对日期?

3 linux date

我可以通过 linux date 命令获得“基于 10 分钟前的上周一”吗?

例如

  • 当前时间:2016-02-09 00:05:00
  • 预期结果:2016-02-01 00:00:00

Sté*_*las 7

如果你有faketime并且你date是动态链接的:

faketime -f -10m date -d 'last monday' '+%F %T'
Run Code Online (Sandbox Code Playgroud)

使用ksh93(仅限内置命令):

printf '%(%F %T)T\n' "$(printf '%(%Y.%m.%d)T' '10 minutes ago')-0 last monday"
Run Code Online (Sandbox Code Playgroud)

在这里,如果是上周日而不是上周一,你可以这样做:

date -d "$(date -d '10 minutes ago' +"%F -%u day")"
Run Code Online (Sandbox Code Playgroud)

或者如果是上周六

date -d "$(date -d '10 minutes ago' +"%F -%w day -1 day")"
Run Code Online (Sandbox Code Playgroud)

但是对于上周一或一周中的任何其他一天,它涉及一些算术:

eval "date -d \"$(date -d '10 minutes ago' +'%F -$(((%u+5)%%7+1)) day')\""
Run Code Online (Sandbox Code Playgroud)

否则,您可以随时执行以下操作:

d=$(date -d 'last monday'); sleep 600; printf '%s\n' "$d"
Run Code Online (Sandbox Code Playgroud)

;-)