如何根据处理日期获取上个月的结束日期?
例子:
Sté*_*las 34
使用 GNU date:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Run Code Online (Sandbox Code Playgroud)
一些 shell 内置了对日期操作的支持:
与ksh93:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)
小智 9
这是一个适用于 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 日
有很多方法可以做到这一点;这是我发现的最简单的一个(这里假设 GNU date):
$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015
Run Code Online (Sandbox Code Playgroud)