我想要以“YYYYMMdd”格式获取当前周一的日期,例如今天是20110627。接下来从明天到星期日,我仍然想打印出周一(即今天)的日期。然后下周重新开始这个过程。
#monday
date -dmonday +%Y%m%d
#last monday
date -dlast-monday +%Y%m%d
#next monday
date -dnext-monday +%Y%m%d
#two mondays from now
date -d'monday+14 days' +%Y%m%d
#two mondays ago
date -d'monday-14 days' +%Y%m%d
#although, if you fancy yourself an Abraham Lincolin
date -d'monday-fortnight ago' +%Y%m%d #2 weeks ago
date -d'monday+fortnight' +%Y%m%d #2 weeks from now
#Monday Next Year
date -d'52+monday' +%Y%m%d
#However, Monday Last Year
date -d'52-monday' +%Y%m%d #DOES NOT WORK
#you can try a day other than monday
#and format this differently.
如果您需要一个范围,您可能需要做一些事情。
#Tuesday to Sunday
#since today is monday, I'll use Tuesday
echo `date -dtuesday +%Y%m%d-``date -dnext-sunday +%Y%m%d`
这将输出:
20110628-20110703
请注意,此方法仅适用于GNU date
我已经了解到:
Solaris版本的date不能支持
-d
选项,可以通过替换sunfreeware.com版本的date来解决。
date -d'monday-fortnight ago' +%Y%m%d
。 - matchewdate -d"next-monday - 1week"
。 - vividate -d"last-sunday + 1 day"
。 - Panda TG Attwood对于没有GNU日期命令(比如我们使用的OS X),我们可以使用“-v”参数。
然后可以这样做:
# Most recent Monday
date -v -Mon
# Output as of this writing
Mon Jun 24 12:35:48 EDT 2013
date -v -Mon "+%Y%m%d"
# Outputs
20130624
如果今天是周一,对于我的情况来说似乎也不是问题,但今天是周四。
# Today's date
date
# Outputs
Thu Jun 27 12:41:39 EDT 2013
# Most recent Thursday
date -v -Thu
# Outputs
Thu Jun 27 12:41:46 EDT 2013
brew install coreutils
命令从Homebrew安装GNU date,之后你就可以使用gdate
来代替它。请注意,这里不做任何解释或添加其他内容,只进行翻译。 - Ben XOdate -v'+2d' "+%Y-%m-%d"
或者从上周二到下周日
echo
date -v -Tue "+%Y-%m-%d - "date -v +Sun "+%Y-%m-%d"
- tristanbailey尝试使用以下方法来获取当前周一的日期。
wd=`date +%u`;
let wd=wd-1;
mon=`date --date="-$wd day" +%Y%m%d`;
mon=$(date -d "$(( $(date +%u) - 1 )) days ago" +%Y%m%d)
的含义是获取上周一的日期并以年月日格式表示。 - glenn jackman我认为这实际上回答了所请求的内容:
date -d "next monday - 7 days"
#!/bin/bash
date=${1:-now}
shift
dow=`date +%u -d "$date"`
dow0=$[ $dow - 1 ]
date -d "$date -$dow0 days" "$@"
工作原理:
date -d
参数,例如“2020-01-01 -2 weeks”+%F
格式化类似的sunday
脚本,结果会更简单:
#!/bin/bash
date=${1:-now}
shift
dow=`date +%w -d "$date"`
date -d "$date -$dow days" "$@"
使用方法:
# monday
Mon Aug 29 02:28:45 PM AEST 2022
# sunday now +%F
2022-08-28
# monday '2022-12-01' +%F
2022-11-28
date +"%F"
可以很好地完成这个任务(补充Metthew Schinckel的评论)。因此,应用到这个问题上,如果你有当前日期为day=$(date +"%F")
,那么date -d "$day -$(date -d $day +%u) days + 1 day" +"%F"
应该总是给出星期一的日期(或者将%F
替换为%Y%m%d
以得到所需的格式)。 - RAM237