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

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

```sh:だめ1
$ date -d "2018-11-01 last friday"
木 11  1 00:00:00 JST 2018
```

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


## ので

modでやることにした。

```sh
#!/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: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
```