我希望所有的日期都在一周的同一天。
inputDate="2021/08/25"
这意味着我应该得到inputDate的同一天。
outputDates="2021/08/04,2021/08/11,2021/08/18,2021/08/25"
我只知道这么多…
inputDate="2021/08/25"
dd=$(date -d "$inputDate" +"%Y/%m/%d")
所以我的计划是做“日期-7”和循环5次向前和向后收集,然后检查月的值是否仍然与inputDate相同,如果不是,然后删除它
你有什么办法吗?
###仅使用shell最简单的方法来获取一个月的所有工作日是通过使用cal命令:
cal -n1 8 2021
输出:
August 2021
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
然后,您可以使用sed awk或其他工具进行过滤,以达到您的目标。
例子:
year=2021
month=8
day=25
weekday_number="$(date -d$year-$month-$day +%w)"
cn=$(($weekday_number + 1))
cal -n1 $month $year |
sed -r 's/(..)\s/\1\t/g;s/ +//g' |
awk -v cn=$cn -F'\t' 'NR<3 || $cn == "" {next} {print $cn}' |
while read wday; do
echo $year/$month/$wday
done
输出:
2021/8/4
2021/8/11
2021/8/18
2021/8/25
# # #不使用cal
or ncal
ncal...<。.。
#!/bin/bash
inputDate="2021/08/25"
dow=$(date -d "$inputDate" +"%a")
month=$(date -d "$inputDate" +"%m")
outputDates=""
for x in $(seq 0 9)
do
validDate=$(date -d "$x $dow 5 week ago" +"%Y/%m/%d" | grep "/$month/")
if [ ! -z $validDate ]
then
if [ ! -z $outputDates ]
then
outputDates="$outputDates,$validDate"
else
outputDates="$validDate"
fi
fi
done
echo "$outputDates"
这个脚本输出:
2021/08/04,2021/08/11,2021/08/18,2021/08/25