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
|
となる。