バッチ処理などの期間指定でよく遭遇するこの手の期間指定
必要になるたび調べていたのでよく使うものをまとめた
今
$ date Wed Mar 17 02:51:47 JST 2021
前日起算の月末
$ date -d "$(date -d "1 day ago 1 month" +"%Y-%m-01") 1 days ago" Wed Mar 31 00:00:00 JST 2021
一日前をベースとした月末、実行した日が3月1日なら2月28日になる感じのやつ
前日起算の月初
$ date -d "1 day ago" +"%Y-%m-01" 2021-03-01
こちらも一日前をベースとした計算
実行した日が3月1日なら2月1日になる
先週一週間(月曜~日曜)
日付のみの出力
- from
$ date -d "last monday 1 week ago" Sun Mar 8 00:00:00 JST 2021
- to
$ date -d "last sunday" Sun Mar 14 00:00:00 JST 2021
先週(月曜0時~日曜23:59)
曜日固定で日付+時刻まで指定するパターン
- from
$ date -d "last monday 1 week ago" +"%Y-%m-%d %H:%M:%S" 2021-03-08 00:00:00
- to
$ date -d "last monday 1 seconds ago" +"%Y-%m-%d %H:%M:%S" 2021-03-14 23:59:59
当日含まない直近1週間(水曜0時~火曜23:59)
- from
$ date -d "1 week ago" +"%Y-%m-%d 00:00:00" 2021-03-10 00:00:00
- to
$ date -d "yesterday" +"%Y-%m-%d 23:59:59" 2021-03-16 23:59:59
unixtimeで出力
たまに期間の指定でunixtimeを指定することがあったりするため覚えておく
$ date +"%s" 1615917477
UTC時刻
$ date -u Tue Mar 16 17:58:05 UTC 2021
所感
- 色々試してたら
1 day ago
=>last day
,1 week
=>next week
という感じでも書けるのでわかりやすいほうで書ける -d
の中身は色々なキーワードをよしなにしてくれるが記入した順序で計算してくれるわけではないのでキーワードによって計算の優先順位がある- 優先順位を考慮して記述する必要がある