如何根据处理日期获取上个月的结束日期?
例子:
- 处理日期 = 15jan2015
- 预计日期 = 2014 年 12 月 31 日,
- 处理日期 = 2015 年 2 月 10 日
- 预计日期 = 2015 年 1 月 31 日
答案1
使用 GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
一些 shell 内置了对日期操作的支持:
和ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
和zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
答案2
这是一个适用于 Mac OS 的版本,它使用 BSDdate
实用程序:
date -v1d -v-1d +%d%b%Y
参数按顺序应用。您可以想象日期是从一个参数传送到下一个参数的。例如:
- 从当前日期开始 (
date
) -> 2017-03-06 - 将该日期设置为该月的第一天 (
-v1d
) -> 2017-03-01 - 从中减去一天 (
-v-1d)
-> 2017-02-28 - 设置日期格式 (
+%d%b%Y
) -> 28Feb2017
您可以使用 向前或向后移动任意月数date -v-1m -v1d -v-1d
,并将其替换-1m
为您想要的向前或向后移动的月数 ( +1m
)。
这是通用答案。该问题专门询问相对于开始日期的日期。 Mac OS / BSD 日期实用程序不允许您提供起始日期戳,但您可以单独设置每个日期元素:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 2014 年 12 月 31 日
答案3
答案4
尝试使用此代码
date -d "-$(date +%d) days month" +%Y-%m-%d