我正在创建一个脚本,用于收集上个月用于报告的信息:
到目前为止,我有以下变量:
#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]}`
Run Code Online (Sandbox Code Playgroud)
变量输出:
year=2017
month=04
month_abv=Apr
Run Code Online (Sandbox Code Playgroud)
我现在需要的只是上个月的最后一天。
您可以使用 GNU 计算本月第一天的前一天date:
date -d "$(date +"%Y-%m-01") - 1 day" +"%F"
Run Code Online (Sandbox Code Playgroud)
或使用dateutils的dateadd:
dateadd "$(date +"%Y-%m-01")" "-1d"
Run Code Online (Sandbox Code Playgroud)
或者有点棘手的dateutils用法。舍入到第 31 个月的最后一天。(记录在案的行为即使在少于 31 天的情况下也能工作数月。)
$ dateround --next today -31d
2017-04-30
$ dateround --next "2016-03-10" -31d
2016-02-29
Run Code Online (Sandbox Code Playgroud)