シェルスクリプトから先月の日付を取得します。

シェルスクリプトから先月の日付を取得します。

処理日に基づいて先月の終了日を取得する方法は?

例:

  • 処理日= 2015年1月15日
  • 推定日= 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

一部のシェルには日付操作のサポートが組み込まれています。

そして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

BSDユーティリティを使用するMac OSのバージョンは次のとおりですdate

date -v1d -v-1d +%d%b%Y

パラメータは順次適用されます。あるパラメータから次のパラメータに日付が渡されることを想像できます。たとえば、

  • 現在の日付( date)から開始 -> 2017-03-06
  • 日付を毎月1日に設定 ( -v1d) -> 2017-03-01
  • ここで一日を引いてください( -v-1d)->2017-02-28
  • 日付形式の設定(+%d%b%Y) - > 2017年2月28日

希望の月数だけ前後に移動することができ、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

持つ方法はさまざまです。これを行います。これが最も簡単なものです私が見つけたもの(ここでGNUを仮定date):

$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015

答え4

このコードを試してください

date -d "-$(date +%d) days  month" +%Y-%m-%d

関連情報