備忘録

Qiitaに書くほどでもない事をこちらに書きます

bashのdateで週数を確認する

dateは月初からの週数ではなく年初からの週数しか出してくれないらしい。

年初からの週数を出すには、date +%Uとすれば良い。 

以下は週数を利用して第二週の水曜日を出力するスクリプト。     

# 月初
START_DATE=$(date +"%Y%m%d" -d"`date +"%Y%m01"`")
# 月末
END_DATE=$(date +"%Y%m%d" -d"`date +"%Y%m01"` 1 days ago + 1 month")
# 月初から2週目を年初からの週数で表示
let SECOND_WEEK=$(date -d $START_DATE +%U)+1

d="$START_DATE"

# 月初から月末までを確認する
while [[ "$d" < "$END_DATE" ]]; do
    w=$(date -d $d +%U)
    u=$(date -d $d +%u)
    # 2週目 かつ 水曜日 なら出力
    if [ "$w" -eq "$SECOND_WEEK" ] && [ "$u" -eq 3 ]; then
        echo $d
    fi
    d=$(date +%F -d "$d 1 day")
done