使用`date`命令获取之前,当前和下个月

我正在使用下面的Ubuntu 11.04下的前一个,目前和下个月:

 LAST_MONTH=`date +'%m' -d 'last month'` NEXT_MONTH=`date +'%m' -d 'next month'` THIS_MONTH=`date +'%m' -d 'now'` 

直到今天,2012年10月的最后一天(2012-10-31)

截至目前我得到的结果如下:

 $ date Wed Oct 31 15:35:26 PDT 2012 $ date +'%m' -d 'last month' 10 $ date +'%m' -d 'now' 10 $ $ date +'%m' -d 'next month' 12 

我想输出结果应该分别是11

不明白为什么date输出的行为是这样的。 应该是一个很好的方式来得到一致的previouscurrent和下个月呢?

Solutions Collecting From Web of "使用`date`命令获取之前,当前和下个月"

问题是, date确实需要你的请求,并试图使用9月31日(10月31日减去一个月)的日期,然后因为不存在,它会移动到第二天。 date文档(从info date )有以下建议:

单位中的绒毛会导致相关物品出现问题。 例如,“2003-07-31 -1个月”可能评估为2003-07-01,因为2003-06-31是无效的日期。 要更可靠地确定上个月,可以要求在当月15日之前的月份。 例如:

  $ date -R Thu, 31 Jul 2003 13:02:39 -0700 $ date --date='-1 month' +'Last month was %B?' Last month was July? $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' Last month was June! 

如果您碰巧在MacOS环境中使用日期,请尝试以下操作:

 ST1:~ ejf$ date Mon Feb 20 21:55:48 CST 2017 ST1:~ ejf$ date -v-1m +%m 01 ST1:~ ejf$ date -v+1m +%m 03 

另外,我宁愿在每个月的第一天计算前一个和下一个月,这样你就不会在结束30/31或28/29(2月/ 2月闰年)

主要的问题发生在你没有日期 – 日期选项可用,你没有权限来安装它,然后尝试下面 –

 Previous month #cal -3|awk 'NR==1{print toupper(substr($1,1,3))"-"$2}' DEC-2016 Current month #cal -3|awk 'NR==1{print toupper(substr($3,1,3))"-"$4}' JAN-2017 Next month #cal -3|awk 'NR==1{print toupper(substr($5,1,3))"-"$6}' FEB-2017