ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

今週や来週の月曜と日曜の日付を生成したい

今週や来週の月曜と日曜の日付を生成したい、ファイル名とかフォルダ名とか用に、Macで。

デフォルトのdateコマンドを使用する

dateコマンドの週は日曜始まりなので、多少注意がいる。

月曜日に実行する場合

その日の月曜日から次の日曜日:

$ echo $(date -v-mon +"%F")"_"$(date -v+sun +"%F")

出力例:

2020-05-18_2020-05-24

次の週の月曜日から次の週の日曜日:

$ echo $(date -j -v+mon -f "%F" $(date -v+1w +"%F") +"%F")"_"$(date -j -v+sun -f "%F" $(date -v+1w +"%F") +"%F")

出力例:

2020-05-25_2020-05-31

火曜日から土曜日に実行する場合

前の月曜日から次の日曜日:

$ echo $(date -v-mon +"%F")"_"$(date -v+sun +"%F")

次の月曜日から次の週の日曜日:

$ echo $(date -v+mon +"%F")"_"$(date -j -v+sun -f "%F" $(date -v+1w +"%F") +"%F")

日曜日に実行する場合

前の月曜日からその日の日曜日:

$ echo $(date -v-mon +"%F")"_"$(date -v-sun +"%F")

次の月曜日から次の週の日曜日:

$ echo $(date -v+mon +"%F")"_"$(date -v+1w +"%F")

GNU系のdateコマンドと同様のgdateコマンドを使用する

Linux とかのGNU系のdateと同じオプションのコマンドを使いたい場合はcoreutilshomebrewで入れるとgdateコマンドが使える。

gdateコマンドのオプション指定方法のほうが分かりやすい。

$ brew install coreutils

月曜日に実行する場合

その日の月曜日から次の日曜日:

$ echo $(gdate -d "monday" +"%F")"_"$(gdate -d "sunday" +"%F")

出力例:

2020-05-18_2020-05-24

次の週の月曜日から次の週の日曜日:

$ echo $(gdate -d "next monday" +"%F")"_"$(gdate -d "1 week next sunday" +"%F")

出力例:

2020-05-25_2020-05-31

火曜日から土曜日に実行する場合

前の月曜日から次の日曜日:

$ echo $(gdate -d "last monday" +"%F")"_"$(gdate -d "sunday" +"%F")

次の月曜日から次の週の日曜日:

$ echo $(gdate -d "next monday" +"%F")"_"$(gdate -d "1 week next sunday" +"%F")

日曜日に実行する場合

前の月曜日からその日の日曜日:

$ echo $(gdate -d "last monday" +"%F")"_"$(gdate -d "sunday" +"%F")

次の月曜日から次の週の日曜日:

$ echo $(gdate -d "next monday" +"%F")"_"$(gdate -d "next sunday" +"%F")

その他

あまり試していないが、dateutilsdateutils)というコマンドツールも便利そう。

参考ページ等

  1. man date
  2. How To Format Date For Display or Use In a Shell Script - nixCraft
  3. bash - UNIX date: How to convert week number (date +%W) to a date range (Mon-Sun)? - Stack Overflow
  4. linux - Print date for the monday of the current week (in bash) - Stack Overflow
  5. shell - Print dates in date range linux - Stack Overflow
  6. dateutils
  7. 10 Practical Examples of Linux Cal/NCal command for Beginners
  8. Display all the dates in week numbers in UNIX - Unix & Linux Stack Exchange
  9. Linux and Unix cal command tutorial with examples | George Ornbo
  10. unix - Get Tuesday and Wednesday next week, with Linux date command - Stack Overflow
  11. Macでdateコマンドが違う件について | 株式会社龍野情報システム
  12. Macのdateコマンドで前日の日付を取得する - Qiita
  13. Macでdateコマンドを使いこなす - ののいち の 1.2..3...
  14. MACのdateコマンドで現在の日時を簡単に表示する | ITを使っていこう
  15. MACのdateコマンドでxx前後で日にちを表示 | ITを使っていこう
  16. date コマンド | コマンドの使い方(Linux) | hydroculのメモ