Ksh

如何在 UNIX (HPUX) 中獲取上個月的最後一天

  • March 22, 2018

我正在創建一個腳本,用於收集上個月用於報告的資訊:

到目前為止,我有以下變數:

#I used an array to get the previous month. 
set -A months Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
x=`date +%m`  
y=`expr $x - 1`
year=`date +%Y`
month=`perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--;print strftime("%m", @t)'`
month_abv=`echo ${months[$y]}`

變數輸出:

year=2017
month=04
month_abv=Apr

我現在需要的只是上個月的最後一天。

我獲得上個月最後一天的方法是:

cal $month $year | awk 'NF {DAYS = $NF}; END {print DAYS}'

使用可變佔位符,我可以獲得前幾個月的日曆並列印該月的最後一天:

cal 04 2017 | awk 'NF {DAYS = $NF}; END {print DAYS}'

輸出:

30

如果有更簡單的方法或更短的方法,我願意接受所有建議。

您可以使用 GNU 計算本月第一天之前的一天date

date -d "$(date +"%Y-%m-01") - 1 day" +"%F"

或使用dateutils’s dateadd

dateadd "$(date +"%Y-%m-01")" "-1d"

或有點棘手的dateutils用法。舍入到最後 31 個月的一天。(記錄在案的行為甚至可以在少於 31 天的情況下持續幾個月。)

$ dateround --next today -31d
2017-04-30
$ dateround --next "2016-03-10" -31d
2016-02-29

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