假设今天是2016年6月30日星期四。
则date +%Y%m%d
是20160630
,date -d'last-thursday' +%Y%m%d
是20160623
,并且date -d'next-thursday' +%Y%m%d
是20160707
。
然而,date -d'last-wednesday' +%Y%m%d
是20160629
,而date -d'next-wednesday' +%Y%m%d
是20160706
。
如果今天是天,是否有包含的{next,last}-*day
版本会返回今天的日期?
Inclusive next week是内置的,只需使用-d"Thursday"
(无前缀(,如果今天是星期四,date
将返回today
,如果不是,则返回下星期四。
但是date
没有包含的最后一个,所以这里有一个包括的最后一工作日kludge函数:
ilast() { a=$(date -d'today' "+%A") ; b=$(date -d"$1" "+%A") ;
[ $a != $b ] && echo -n "last " ; echo $b ; }
测试,(也显示了ilast
的用法(:
for d in Sun. Mon. Tue. Wed. Thu. Fri. Sat. ; do
echo -n $(ilast $d)" " ;
date -d"$(ilast $d)" "+%Y%m%d" ;
done | column -t
输出:
last Sunday 20160626
last Monday 20160627
last Tuesday 20160628
last Wednesday 20160629
Thursday 20160630
last Friday 20160624
last Saturday 20160625
函数将$a设置为today
的工作日,将$b设为$1的工作日(这将是一个不同的工作日(,除非<1>是今天的工作日。因此,如果工作日$a和$b不相等(七天中有六天不同(,我们在工作日的长名称前加上"last">。如果工作日$a和$$b相等,请不要打印"last">,因为(七天中的一天(,默认的(包括下一天(已经完成了所需的操作。