分页: 1 / 1

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

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

(和我理解的不一样,求教)

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

发表于 : 2020-04-28 10:10
astolia

代码: 全选

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

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

发表于 : 2020-04-28 11:14
jiandan23
感谢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)