我想獲得所有具有相同星期的日期。
inputDate="2021/08/25"/span>
這意味著我應該得到所有與inputDate相同的星期。
outputDates="2021/08/04,2021/08/11,2021/08/18,2021/08/25"
到目前為止,我只得到了這一點。
inputDate="2021/08/25"/span>
dd=$(date -d "$inputDate" "%Y/%m/%d")
所以我打算做 "date -7",并向前和向后回圈5次,然后收集它,然后檢查月份的值是否仍然與inputDate相同,如果不是,則放棄它
。你有什么方法可以做到這一點嗎?
uj5u.com熱心網友回復:
只使用shell,從一個月中獲取所有作業日的最簡單方法是使用cal命令:
cal -n1 8 2021
輸出:
2021年8月
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
月=8
日=25
weekday_number="$(date -d$year-month-$day %w)"
cn=$(($weekday_number 1)
cal -n1 $month $year !
sed -r 's/(..)s/1 /g;s/ /g' !
awk -v cn=$cn -F' ' '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
uj5u.com熱心網友回復:
不使用cal或ncal...
#!/bin/bash
inputDate="2021/08/25"/span>
dow=$(date -d "$inputDate" "%a")
month=$(date -d "$inputDate" "%m"/span>)
outputDates="".
for x in $(seq 0 9)
do
validDate=$(date -d "$x $dow 5周前" "%Y/%m/%d" | grep "/$month/")
if [ ! -z $validDate ] 。
then [!
if [ ! -z $outputDates ]
then [!
outputDates="$outputDates,$validDate"/span>
else
outputDates="$validDate"
fi
fi
done
echo "$outputDates"
該腳本輸出:
2021/08/04,2021/08/11,2021/08/18,2021/08/25
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318330.html
標籤:
