【问题标题】:Get date with same day in month获取月份中同一天的日期
【发布时间】:2021-10-26 02:17:50
【问题描述】:

我想获取一周中同一天的所有日期。

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相同,如果不是则丢弃它

你有什么办法吗?

【问题讨论】:

    标签: linux date unix sh


    【解决方案1】:

    仅使用 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
    

    【讨论】:

      【解决方案2】:

      不使用calncal...

      #!/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
      

      【讨论】:

        猜你喜欢
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多