Date

如何知道一個月的最後一個星期日

  • March 25, 2022

我嘗試在 ESXI 上編寫腳本,我需要添加“如果每月的最後一個星期日”。我試試

date -d @$(( $(date -d $(date -d @$(( $(date +%s) + 2678400 )) +%Y%m01) +%s) - 604800 )) +%d

它不能工作,但它可以在 Debian 上工作。

現在在 ESXi 上輸出八月

我相信問題是

給定一個特定的日期,我可以確定它是否是該月的最後一個星期日?

而不是更一般的問題

給定一個特定的月份,它的最後一個星期日是哪一天?

鑑於此,我們可以將問題分為兩部分:

  • 日期是星期天嗎?
  • 是每個月的最後一周嗎?

對於第一部分,測試很簡單:

date -d "$date" +%a  # outputs "Sun" for a Sunday

我們可以測試一下:

test $(date -d "$date" +%a) = Sun  # success if $date is a Sunday

現在,為了測試是否是該月的最後一周,我們可以在日期上加上一周,看看這是否給了我們下個月的前 7 天之一:

test $(date -d "$date + 1week" +%e) -le 7

由於 的 與 的工作日$date + 1week相同$date,我們可以一次性生成測試的兩個部分,並使用 Bash 正則表達式測試:

if [[ $(date -d "$date + 1week" +%d%a) =~ 0[1-7]Sun ]]
then
   echo "$date is the last Sunday of the month!"
fi

測試:

$ ./330571.sh 2016-12-01
$ ./330571.sh 2016-12-04
$ ./330571.sh 2016-12-25
2016-12-25 is the last Sunday of the month!
$ ./330571.sh 2017-01-28
$ ./330571.sh 2017-01-29
2017-01-29 is the last Sunday of the month!

引用自:https://unix.stackexchange.com/questions/330571