해당 시간 범위 내의 근무일 계산

해당 시간 범위 내의 근무일 계산

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

관련 정보