目次

Mac標準のBashやZshのdateで月末と月初を取得する


Mac OSで簡易スクリプトを記載するときに、どうしても月末と月初を取得したかった

Qiitaを参考にしたところ、 できないって書いてあったけれどやってみたらできた ので備忘録

ちなみに、MacOSは標準ではzsh。以下の方法はzshでもbashでも問題なく利用できる。

OSX標準のdate関数のコマンドリファレンスを確認

確認した環境はMacOS Monterey 12.3.1。

まずはコマンドリファレンスからはじめてみよう。コマンドリファレンス(man)を以下のように起動

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
man date

>EXAMPLES
>
>     The command:
>
>           date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"
>
>     will display:
>
>           DATE: 1987-11-21
>           TIME: 13:36:16
>
>    略
>
>     The command:
>
>           date -v1d -v3m -v0y -v-1d
>
>     will display the last day of February in the year 2000:
>
>           Tue Feb 29 03:18:00 GMT 2000

んん?いきなり解決した気がする。つまり オプションv を指定すると諸々の操作ができる。

つまりややこしいけれども、

  • -v1d – 月初が出る。
  • -v-1d – 1日前
  • -v1m – 1月(その年の最初の月)
  • -v-1m – 先月

ということ。

月初をMacOS標準の関数で求める

現在の月を指定( -v1d )する。したがって、

1
2
3
4
5
6
date -v1d
#2022年 5月 1日 日曜日 21時52分42秒 JST

#フォーマットを指定場合、例えば YYYY-mm-dd の場合は
date -v1d '+%Y-%m-%d'
#2022-05-01

月末をMacOS標準の関数で求める

月末を求める場合は、現在の月を指定( -v1d )して、1日前にする( -v-1d )。したがって、

1
2
3
4
5
6
date -v1d -v-1d
#2022年 4月30日 土曜日 21時57分11秒 JST

#フォーマットを指定場合、例えば YYYY-mm-dd の場合は
date -v1d -v-1d '+%Y-%m-%d'
#2022-04-30

個人的によく利用する日付のフォーマットと出力一覧

2022年1月1日を色々なフォーマットで出してみる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#yyyy/mm/dd
date -v1d -v1m '+%Y/%m/%d'
#2022/01/01

#yyyy/mm/dd (曜日)
date -v1d -v1m '+%Y/%m/%d(%a)'
#2022/01/01(土)

date -v1d -v1m '+%Y/%m/%d(%A)'
#2022/01/01(土曜日)

#yyyy-mm-dd
date -v1d -v1m '+%F'
#2022-01-01

date -v1d -v1m '+%Y-%m-%d'
#2022-01-01

#yy-mm-dd
date -v1d -v1m '+%y-%m-%d'
#22-01-01

となる。