Bashシェルスクリプトで月の最初の日、最後の日を算出する

2023-03-27Bash

はじめに

他の方が作成したシェルスクリプトを見ていたときに月初め、月末の値がリテラル表記されていました。

date コマンドを使って算出する方法を紹介すると面白いと思いまとめました。

検証環境

$ uname -moi
arm64 unknown Darwin

$ bash -version | head -n 1
GNU bash, version 5.2.15(1)-release (aarch64-apple-darwin22.1.0)

前提

今回紹介する日の出力フォーマットは YYYY-MM-DD 形式としています。

けれども少しコマンドを触れば任意のフォーマットで出力可能な内容となっています。

月の最初の日 ( 月初め ) を算出

# 2ヶ月前
$ N=2
$ date -d "-${N}month" +%Y-%m-01
2022-12-01

# 1ヶ月前 / 前月
$ N=1
$ date -d "-${N}month" +%Y-%m-01
2023-01-01

# 0ヶ月前 / 今月
$ N=0
$ date -d "-${N}month" +%Y-%m-01
2023-02-01

月の最後の日 ( 月末 ) を算出

今月

# 2ヶ月前
$ N=2
$ date -d "$(date -d "$((-N+1))month" +%Y-%m-01) -1day" +%Y-%m-%d
2022-12-31

# 1ヶ月前 / 前月
$ N=1
$ date -d "$(date -d "$((-N+1))month" +%Y-%m-01) -1day" +%Y-%m-%d
2023-01-31

# 0ヶ月前 / 今月
$ N=0
$ date -d "$(date -d "$((-N+1))month" +%Y-%m-01) -1day" +%Y-%m-%d
2023-02-28

( 簡易版 ) 今月の月初め

$ date -d "-$(date +%d) days + 1 days" +%Y-%m-%d
2023-02-01

$ date -d "-$(($(date +%d)-1)) days" +%Y-%m-%d
2023-02-01

( 簡易版 ) 前月の月末

$ date -d "-$(date +%d) days" +%Y-%m-%d
2023-01-31

ひとこと

まずは月初めを算出する。

2023-03-27Bash