我想从给定日期减去月份。
businessDate='2019-12-31'
diff=1
busDate=$(date --date="$businessDate -$diff month" +%Y-%m-%d)
echo "Date: $busDate"
Run Code Online (Sandbox Code Playgroud)
此代码返回 2019-12-01 而不是 2019-11-30。有人可以建议一个解决方案来获得正确的日期吗?
正如“info date”中所示,计算相对月份(1个月前等)的日期是有问题的,有时会导致意想不到的结果:
\n\n来自:29.7 日期字符串中的相关项目:
\n\n\n\n\n单位中的模糊可能会导致相关项目出现问题。例如,\xe2\x80\x982003-07-31 -1 Month\xe2\x80\x99 可能计算为 2003-07-01,因为\n 2003-06-31 是无效日期
\n
一些解决方案:
\n\n第三种方法的好处是它代表月份移动。
\n\n选项 #3 的实现是 bash 有点麻烦,可能更好地编写 python/perl 代码。
\n\nIDATE=2019-12-31\nN_MONTH=-1\nDD_PART=$(date +\'%d\' -d "$IDATE")\nYYYYMM=$(date +\'%Y-%m\' -d "$(date +\'%Y-%m-01\' -d "$IDATE") $N_MONTH month")\nLAST_DAY_IN_YYYYMM=$(date +\'%d\' -d "$YYYYMM-01 +1month -1day")\nif [[ "$LAST_DAY_IN_YYYYMM" -lt "$DD_PART" ]] ; then\n DD_PART=$LAST_DAY_IN_YYYYMM\nfi\necho "$YYYYMM-$DD_PART"\nRun Code Online (Sandbox Code Playgroud)\n