得到日期与相同的日子在一个月

2022-01-28 03:07:58 标签 linuxdateunixsh

我希望所有的日期都在一周的同一天。

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 ncalncal...<。.。

#!/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
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码