我想从给定的日期中减去月份。
businessDate='2019-12-31'
diff=1
busDate=$(date --date="$businessDate -$diff month" +%Y-%m-%d)
echo "Date: $busDate"
此代码返回2019-12-01而不是2019-11-30。有人可以建议解决方案以获取正确的日期吗?
如“信息日期”中所示,计算具有相对月份(1个月前等)的日期是有问题的,有时会导致意外结果:
从:29.7日期字符串中的相对项:
单位的绒毛可能导致相关项目出现问题。对于例如,“ 2003-07-31 -1个月”的计算结果为2003-07-01,因为2003-06-31是无效日期
某些解决方案:
第三种方法的好处是它代表月份移动。
选项#3的实现是bash有点麻烦,编写python / perl代码可能更好。
IDATE=2019-12-31
N_MONTH=-1
DD_PART=$(date +'%d' -d "$IDATE")
YYYYMM=$(date +'%Y-%m' -d "$(date +'%Y-%m-01' -d "$IDATE") $N_MONTH month")
LAST_DAY_IN_YYYYMM=$(date +'%d' -d "$YYYYMM-01 +1month -1day")
if [[ "$LAST_DAY_IN_YYYYMM" -lt "$DD_PART" ]] ; then
DD_PART=$LAST_DAY_IN_YYYYMM
fi
echo "$YYYYMM-$DD_PART"