打印当前星期一的日期(以bash为单位)

veh*_*zzz 29 linux bash date

我想以当前星​​期一的星期一格式'YYYYMMdd'(例如,今天是20110627)格式获取日期.从明天到周日,我还想打印星期一(今天)的日期.然后下周重复这个过程

mat*_*hew 60

#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.
Run Code Online (Sandbox Code Playgroud)

如果一个范围是你的事后你可能需要做一些事情

#Tuesday to Sunday
#since today is monday, I'll use Tuesday
echo `date -dtuesday +%Y%m%d-``date -dnext-sunday +%Y%m%d`
Run Code Online (Sandbox Code Playgroud)

哪个会输出:

20110628-20110703

更多关于日期

请注意,这仅适用于GNU日期

我读过:

无法支持的Solaris版本的日期-d可以通过替换sunfreeware.com版本的日期来解决

  • 这些都不能完全提供最初的问题:“星期一”是将来的最近星期一的日期(如果今天不是星期一),因此不会给出当前星期的星期一。这个星期的星期一可以通过稍微回旋的`date -d“下星期一-1week”来指定。 (2认同)

Sam*_*sai 12

对于我们这些没有GNU日期的人(比如我们的OS Xers),我们可能会有"-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
Run Code Online (Sandbox Code Playgroud)

如果今天是星期一,在我目前的情况下星期四,这似乎也不是问题

# 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
Run Code Online (Sandbox Code Playgroud)

  • 在 Max 上,GNU 日期可从 homebrew 使用 `brew install coreutils` 获得。之后,您可以将其用作“gdate”。 (2认同)

小智 9

我认为这实际上回答了所要求的内容:

date -d "next monday - 7 days"
Run Code Online (Sandbox Code Playgroud)


Fem*_*emi 8

试试这个以获取当前星期一的日期.

wd=`date +%u`; 
let wd=wd-1; 
mon=`date --date="-$wd day" +%Y%m%d`;
Run Code Online (Sandbox Code Playgroud)

  • 作为一个单行:`mon = $(date -d"$(($(date +%u) - 1))天前"+%Y%m%d) (4认同)