Date

快速計算日期差異

  • September 13, 2021

我經常想做一些快速的日期計算,例如:

  • 這兩個日期有什麼區別?
  • 在另一個日期之後n週的日期是什麼?

我通常打開日曆併計算天數,但我認為應該有一個程序/腳本可以用來進行這些計算。有什麼建議?

使用 GNU date(1) 可以輕鬆實現“日期後的 n 週”:

$ date -d 'now + 3 weeks'
Tue Dec  6 23:58:04 EST 2011
$ date -d 'Aug 4 + 3 weeks'
Thu Aug 25 00:00:00 EST 2011
$ date -d 'Jan 1 1982 + 11 weeks'
Fri Mar 19 00:00:00 EST 1982

我不知道計算兩個日期之間差異的簡單方法,但是您可以使用 shell 函式圍繞 date(1) 包裝一些邏輯。

datediff() {
   d1=$(date -d "$1" +%s)
   d2=$(date -d "$2" +%s)
   echo $(( (d1 - d2) / 86400 )) days
}
$ datediff '1 Nov' '1 Aug'  # Note: answer should be 92 days but in my timezone, DST starts between the dates.
91 days

交換d1d2如果您希望以另一種方式計算日期,或者變得更花哨以使其無關緊要。此外,如果在間隔中存在非 DST 到DST的過渡,則其中一天將只有 23 小時;您可以通過將 ½ 天添加到總和來補償。

echo $(( (((d1-d2) > 0 ? (d1-d2) : (d2-d1)) + 43200) / 86400 )) days

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