該当時間範囲内の勤務日の計算

該当時間範囲内の勤務日の計算

bashで時間範囲を指定し、その範囲内の勤務日を計算したいと思います。私が見つけたこれは切った2020年1月と2月の印刷用に編集済み:

#!/bin/bash

startdate=2020-01-01
enddate=2020-02-28

curr="$startdate"
while true; do
    echo "$curr"
    [ "$curr" \< "$enddate" ] || break
    curr=$( date +%Y-%m-%d --date "$curr +1 day" )
done

今、この範囲のすべての月曜日を印刷したいと思います。どうすればいいですか?

echo "$curr"私はそれを次のように変更したいと思います。echo "$curr" | date +%Y-%m-%d-%aまたは表示なし:date +%Y-%m-%d-%a <<< "$curr"平日を出力に追加し、%a月曜日をまたはでフィルタリングして計算します。このように出力フォーマットを指定する方法は機能しません。sedawk

答え1

どうですか?

startdate=2020-01-01
enddate=2020-02-28
mondays=()
# what day of week is startdate? Sun=0, Sat=6
dow=$(date -d "$startdate" "+%w")
# the date of the first monday on or after startdate
# if you want Tuesdays, change "1" to "2", and so on for other days.
monday=$(date -d "$startdate + $(( (7 + 1 - dow) % 7 )) days" "+%F")
# find all mondays in range
until [[ $monday > $enddate ]]; do
    mondays+=( "$monday" )
    monday=$(date -d "$monday + 7 days" "+%F")
done
printf "%s\n" "${mondays[@]}"

出力

2020-01-06
2020-01-13
2020-01-20
2020-01-27
2020-02-03
2020-02-10
2020-02-17
2020-02-24

関連情報