処理日に基づいて先月の終了日を取得する方法は?
例:
- 処理日= 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