notebook

都内でWEB系エンジニアやってます。

dateコマンドで月初、月末、先週の期間を出力する

バッチ処理などの期間指定でよく遭遇するこの手の期間指定

必要になるたび調べていたのでよく使うものをまとめた

$ 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の中身は色々なキーワードをよしなにしてくれるが記入した順序で計算してくれるわけではないのでキーワードによって計算の優先順位がある
    • 優先順位を考慮して記述する必要がある