LoginSignup
0
0

More than 5 years have passed since last update.

dateコマンドの日時指定と last を組み合わせられなかった話

Posted at

「特定日時から遡って直近の金曜日」っていうのが必要になって、
GNU date でできるかと思って試したけど駄目っぽかった。

だめ1
$ date -d "2018-11-01 last friday"
木 11  1 00:00:00 JST 2018
だめ2
# 2018-11-13 現在
$ date -d "2018-11-01" -d "last friday"
金 11  9 00:00:00 JST 2018

ので

modでやることにした。

#!/bin/bash
set -ue

function target_last_friday() {
    from="$1"
    w=$(date -d "$from" +%w)
    mod=$((7 - $(date -d Fri +%w)))
    diff=$(( (mod + w) % 7 ))
    date -d "$from $diff day ago" +%Y-%m-%d
}

###
# 今日から
date
echo "---"

# 90日ほど遡って確認
seq 0 90 | while read d; do
    t1=$(date -d "$d day ago" +%F)
    echo -ne "$t1 -> "
    t2=$(target_last_friday "$t1")
    date -d "$t2"
done

対象の曜日を変えたければ $(date -d Fri +%w) ここ直せばOK。

stdout
火 11 13 19:09:19 JST 2018
---
2018-11-13 -> 金 11  9 00:00:00 JST 2018
2018-11-12 -> 金 11  9 00:00:00 JST 2018
2018-11-11 -> 金 11  9 00:00:00 JST 2018
2018-11-10 -> 金 11  9 00:00:00 JST 2018
2018-11-09 -> 金 11  9 00:00:00 JST 2018
2018-11-08 -> 金 11  2 00:00:00 JST 2018
2018-11-07 -> 金 11  2 00:00:00 JST 2018
2018-11-06 -> 金 11  2 00:00:00 JST 2018
2018-11-05 -> 金 11  2 00:00:00 JST 2018
2018-11-04 -> 金 11  2 00:00:00 JST 2018
2018-11-03 -> 金 11  2 00:00:00 JST 2018
2018-11-02 -> 金 11  2 00:00:00 JST 2018
2018-11-01 -> 金 10 26 00:00:00 JST 2018
2018-10-31 -> 金 10 26 00:00:00 JST 2018
2018-10-30 -> 金 10 26 00:00:00 JST 2018
2018-10-29 -> 金 10 26 00:00:00 JST 2018
2018-10-28 -> 金 10 26 00:00:00 JST 2018
2018-10-27 -> 金 10 26 00:00:00 JST 2018
2018-10-26 -> 金 10 26 00:00:00 JST 2018
2018-10-25 -> 金 10 19 00:00:00 JST 2018
2018-10-24 -> 金 10 19 00:00:00 JST 2018
2018-10-23 -> 金 10 19 00:00:00 JST 2018
2018-10-22 -> 金 10 19 00:00:00 JST 2018
2018-10-21 -> 金 10 19 00:00:00 JST 2018
2018-10-20 -> 金 10 19 00:00:00 JST 2018
2018-10-19 -> 金 10 19 00:00:00 JST 2018
2018-10-18 -> 金 10 12 00:00:00 JST 2018
2018-10-17 -> 金 10 12 00:00:00 JST 2018
2018-10-16 -> 金 10 12 00:00:00 JST 2018
2018-10-15 -> 金 10 12 00:00:00 JST 2018
2018-10-14 -> 金 10 12 00:00:00 JST 2018
2018-10-13 -> 金 10 12 00:00:00 JST 2018
2018-10-12 -> 金 10 12 00:00:00 JST 2018
2018-10-11 -> 金 10  5 00:00:00 JST 2018
2018-10-10 -> 金 10  5 00:00:00 JST 2018
2018-10-09 -> 金 10  5 00:00:00 JST 2018
2018-10-08 -> 金 10  5 00:00:00 JST 2018
2018-10-07 -> 金 10  5 00:00:00 JST 2018
2018-10-06 -> 金 10  5 00:00:00 JST 2018
2018-10-05 -> 金 10  5 00:00:00 JST 2018
2018-10-04 -> 金  9 28 00:00:00 JST 2018
2018-10-03 -> 金  9 28 00:00:00 JST 2018
2018-10-02 -> 金  9 28 00:00:00 JST 2018
2018-10-01 -> 金  9 28 00:00:00 JST 2018
2018-09-30 -> 金  9 28 00:00:00 JST 2018
2018-09-29 -> 金  9 28 00:00:00 JST 2018
2018-09-28 -> 金  9 28 00:00:00 JST 2018
2018-09-27 -> 金  9 21 00:00:00 JST 2018
2018-09-26 -> 金  9 21 00:00:00 JST 2018
2018-09-25 -> 金  9 21 00:00:00 JST 2018
2018-09-24 -> 金  9 21 00:00:00 JST 2018
2018-09-23 -> 金  9 21 00:00:00 JST 2018
2018-09-22 -> 金  9 21 00:00:00 JST 2018
2018-09-21 -> 金  9 21 00:00:00 JST 2018
2018-09-20 -> 金  9 14 00:00:00 JST 2018
2018-09-19 -> 金  9 14 00:00:00 JST 2018
2018-09-18 -> 金  9 14 00:00:00 JST 2018
2018-09-17 -> 金  9 14 00:00:00 JST 2018
2018-09-16 -> 金  9 14 00:00:00 JST 2018
2018-09-15 -> 金  9 14 00:00:00 JST 2018
2018-09-14 -> 金  9 14 00:00:00 JST 2018
2018-09-13 -> 金  9  7 00:00:00 JST 2018
2018-09-12 -> 金  9  7 00:00:00 JST 2018
2018-09-11 -> 金  9  7 00:00:00 JST 2018
2018-09-10 -> 金  9  7 00:00:00 JST 2018
2018-09-09 -> 金  9  7 00:00:00 JST 2018
2018-09-08 -> 金  9  7 00:00:00 JST 2018
2018-09-07 -> 金  9  7 00:00:00 JST 2018
2018-09-06 -> 金  8 31 00:00:00 JST 2018
2018-09-05 -> 金  8 31 00:00:00 JST 2018
2018-09-04 -> 金  8 31 00:00:00 JST 2018
2018-09-03 -> 金  8 31 00:00:00 JST 2018
2018-09-02 -> 金  8 31 00:00:00 JST 2018
2018-09-01 -> 金  8 31 00:00:00 JST 2018
2018-08-31 -> 金  8 31 00:00:00 JST 2018
2018-08-30 -> 金  8 24 00:00:00 JST 2018
2018-08-29 -> 金  8 24 00:00:00 JST 2018
2018-08-28 -> 金  8 24 00:00:00 JST 2018
2018-08-27 -> 金  8 24 00:00:00 JST 2018
2018-08-26 -> 金  8 24 00:00:00 JST 2018
2018-08-25 -> 金  8 24 00:00:00 JST 2018
2018-08-24 -> 金  8 24 00:00:00 JST 2018
2018-08-23 -> 金  8 17 00:00:00 JST 2018
2018-08-22 -> 金  8 17 00:00:00 JST 2018
2018-08-21 -> 金  8 17 00:00:00 JST 2018
2018-08-20 -> 金  8 17 00:00:00 JST 2018
2018-08-19 -> 金  8 17 00:00:00 JST 2018
2018-08-18 -> 金  8 17 00:00:00 JST 2018
2018-08-17 -> 金  8 17 00:00:00 JST 2018
2018-08-16 -> 金  8 10 00:00:00 JST 2018
2018-08-15 -> 金  8 10 00:00:00 JST 2018
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0