【问题标题】:Correctly get the date of "last monday"正确获取“上周一”的日期
【发布时间】:2018-09-04 16:48:36
【问题描述】:

我知道你们中的一些人在想什么:“That's easy, just use this

date -dlast-monday +%Y%m%d

不是实际上是最后一个星期一。那是最近的星期一,在英语中可能被描述为“过去的星期一”。

“上周一”通常是指上周的周一。 date 是否有任何简写方式来了解以英语为母语的人说“上周一”时的意思?

例如,今天是我写这篇文章的星期二。日期为 2018-09-04。我想得到2018-08-27。

(至少假设有可能可能有些母语人士有不同的方言,但无论哪种方式你都理解我的问题,即使你有不同的方式使用表达“最后*day”。)

【问题讨论】:

    标签: bash date


    【解决方案1】:
    $ date +%F
    2018-09-04
    $ date -d "1 week ago last monday" +%F
    2018-08-27
    

    当然,听起来应该是上周一的前一周,或者 2018-08-20。听起来更合乎逻辑而又不会不自然的东西可能是

    $ date -d "last monday -1 week" +%F
    2018-08-27
    

    【讨论】:

    • 如果我在周日运行,我会得到 6 天前的周一吗?看起来不像……
    • @iconoclast 以英语为母语的人在周日说“上周一”时是否指 6 天前的周一?即,这是否假定星期日为下周的第一天?
    • LAST MONDAY 在什么时候递增?周四?星期五?
    • @BenjaminW.:有趣的问题,但它们属于英语堆栈交换,而不是这里。我承认实际上它比上周的*day 更复杂,但我认为就这个问题而言,我的简单分析已经足够好了。而且我认为我从未找到任何人将 yesterday 称为“last *day”。
    • @Jack:你问的是英语,还是date 命令的期望行为?如果是前者,我认为我的上述评论适用。如果是后者,能够在命令中指定它实际上可能会很好,但我怀疑这是可能的。
    【解决方案2】:

    我相信这可能有助于获得上周一的日期:

    date -d"last-sunday - 6 days"
    

    在 macOS 上,您可以使用 Homebrew 安装 GNU 实用程序并使用

    gdate -d"last-sunday - 6 days"
    

    至少在我的 GNU 版本中,如果当前是星期日,last-sunday 将返回当前日期。 This may have changed in newer versions.

    【讨论】:

    • 我有 GNU date v. 8.27。它不会返回当前日期。
    • @Jack:我会尝试更新,看看是否能得到你描述的行为,并尝试更新答案....尽管date 的旧/错误行为似乎是实际上更适合我目前的目的。
    猜你喜欢
    • 2015-03-10
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2015-05-12
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多