date -d "last monday"为什么获取的是本周一的日期

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
jiandan23
帖子: 86
注册时间: 2010-12-17 22:31
系统: Mint 19.2

date -d "last monday"为什么获取的是本周一的日期

#1

帖子 jiandan23 » 2020-04-28 9:08

[root@mytest ~]# date
2020年 04月 28日 星期二 09:03:41 CST
[root@mytest ~]# date -d "last monday"
2020年 04月 27日 星期一 00:00:00 CST

(和我理解的不一样,求教)
头像
astolia
论坛版主
帖子: 6569
注册时间: 2008-09-18 13:11

Re: date -d "last monday"为什么获取的是本周一的日期

#2

帖子 astolia » 2020-04-28 10:10

代码: 全选

last
[lɑ:st]
n. 末尾,最后;上个;鞋楦(做鞋的模型)
adj. 最后的;最近的,最新的;仅剩的;最不可能…的
vi. 持续;维持,够用;持久
vt. 度过,拖过;使维持
adv. 最后地;上次,最近;最后一点
这个就是自然语言的问题了。按道理讲,就该是往过去一天天数,哪天是周一就是哪天。
但是:
1、很多人,即使是英语母语的,提到星期几的时候都是以周为单位思考的,所以在说last/next monday都会下意识地略过当前周。
2、翻译成中文,成了“上个星期一”,容易被理解成“上个星期的星期一”
考虑存在到这种混淆,一般会在后面补充this week之类明确是哪一周

代码: 全选

$ date -d "last monday this week"
2020年04月27日  0:00:00
$ date -d "last monday last week"
2020年04月20日  0:00:00
头像
jiandan23
帖子: 86
注册时间: 2010-12-17 22:31
系统: Mint 19.2

Re: date -d "last monday"为什么获取的是本周一的日期

#3

帖子 jiandan23 » 2020-04-28 11:14

感谢astolia,道理搞清楚了,不过我这个命令不确定会在星期几执行,所以即使加上“last week”,到下一个周一又会出现问题:
[root@mytest ~]# date -s "2020-05-04"
2020年 05月 04日 星期一 00:00:00 CST
[root@mytest ~]# date
2020年 05月 04日 星期一 00:00:04 CST
[root@mytest ~]# date -d "last monday last week"
2020年 04月 20日 星期一 00:00:00 CST

(我现在用的是当前天往前面减的办法:date --date="-$(($(date +%u)+6)) days" +%F)
回复