【问题标题】:Print date for the monday of the current week (in bash)打印当前一周的星期一的日期(在 bash 中)
【发布时间】:2011-09-23 18:16:25
【问题描述】:

我想获取当前星期的星期一格式为“YYYYMMdd”的日期(例如,今天是 20110627)格式。从明天到周日,我仍然想打印周一(今天)的日期。然后下周,重复这个过程

【问题讨论】:

  • 认为您必须使用一年中的周数和 $(date) 格式进行一些数学运算...
  • 重读此文,您是否要求周一至下周日这样的范围?
  • 一些 unixen 允许 --iso-8601,它为您提供“%Y-%m-%d”,我发现手动扫描日期更容易。
  • 是的,基本上date +"%F" 做得很好(添加到 Metthew Schinckel 的评论中)。因此,将此应用于问题,如果您的当前日期为day=$(date +"%F"),那么date -d "$day -$(date -d $day +%u) days + 1 day" +"%F" 应该始终为您提供星期一日期(或将%F 替换为%Y%m%d 以获得请求的格式)。

标签: linux bash date


【解决方案1】:
#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

More on Dates

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

我已经读到了:

Solaris 版本的日期,不能 支持-d 可以解决 替换 sunfreeware.com 版本的 日期

【讨论】:

  • date -d"monday-fortnight" 给我的结果与 + 相同。
  • 确实如此......很好。我可能一次只尝试了一个。我的机智尝试就这么多。正确的解决方案是date -d'monday-fortnight ago' +%Y%m%d
  • 这些都没有给出原始问题的确切内容,“星期一”是最近的星期一的日期未来(如果今天不是星期一),所以不会给出本周的星期一。本周的星期一可以通过稍微迂回的date -d"next-monday - 1week"
  • 是的,我发现这个解决方案不起作用,而是改用date -d"last-sunday + 1 day"
  • 这不能回答问题。为什么会被接受?
【解决方案2】:

对于我们这些没有 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

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

# 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

【讨论】:

  • 令人沮丧的是,GNU date 没有-v,所以这个解决方案也不能同时用于 Mac 和 Linux。
  • 在 Max 上,GNU 日期可从自制软件获得,brew install coreutils。之后,您可以将其用作“gdate”。
  • 如果您使用其他逻辑来传递您也可以使用 +/- 天的天数,这可能会有所帮助,但会使更复杂 date -v'+2d' "+%Y-%m-%d" 或上周二到下周日 echo date -v -Tue "+%Y-%m-%d - "date -v +Sun "+%Y-%m-%d"
【解决方案3】:

试试这个来获取当前星期一的日期。

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)
  • 我喜欢。从来没有尝试过这样烘焙:一直以为我会因为试图将所有内容压缩成一行而被闪电击倒:)
【解决方案4】:

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

date -d "next monday - 7 days"

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多