我如何从UNIX的给定日期开始上一个星期日的日期



从给定日期(不是当前日期)作为输入

获取上一个星期日日期作为输出

示例输入:08-30-2017(%m-%d-%y)

输出应在上周日:08-27-2017

===

以下所有命令使用当前的参考。但是我想将参考日期作为输入以获取上周日的输入。请帮助我使用命令。

日期 %m-%d-%y -d" 2017-09-10 -7天"

日期 %m-%d-%y -d" last Sun"

我希望以下解决方案可以帮助您:

export day=08-30-2017
date -d "$day -$(date -d $day +%w) days"

这将始终在给定日期之前(或日期本身)之前打印。

date -d "$day -$(date -d $day +%u) days"

这将始终在给定日期之前的星期日打印(而不是日期本身)。

如果处理固定的日期格式%m-%d-%Y,则应将其转换为%Y-%m-%d格式,以通过date函数处理:

d='08-30-2017'
d=${d##*-}-${d%-*}
lst_sunday=$(date -d "$d -$(date -d $d +%u) days" +"%m-%d-%Y")
echo $lst_sunday
08-27-2017

+%u-解释格式指定器,一周的一天(1..7);1是星期一

非常简单的方式 -

从给定日期开始首先计算Dayofweek。将是1-7。星期一是1等...星期六6和星期日7。

然后从给定的日期减去Dayofweek。那是你的最后一个星期日。

$ givenDate="08-30-2017"
$ dayofweek=$(date -j -f '%m-%d-%Y' $givenDate +'%u')
$ date -j -f '%m-%d-%Y' -v-${dayofweek}d $givenDate +%m-%d-%Y
08-27-2017

这是从某种程度上查询某天(1..7)的功能

function query_last_date(){
  declare -A week_day
  week_day[1]="mon"
  week_day[2]="tue"
  week_day[3]="wed"
  week_day[4]="thu"
  week_day[5]="fri"
  week_day[6]="sat"
  week_day[7]="sun"
  t="$1"
  query_last_day=$2
  d=${t##*-}-${t%-*}
  inp_day=$(date -d $d +%u)
  if test $query_last_day -gt $inp_day; then
    offset=$(expr $inp_day + 7 - $query_last_day)
  else
    offset=$(expr $inp_day - $query_last_day)
  fi
  out_date=$(date -d "$d -$offset days" +"%m-%d-%Y")
  echo "inp_date $t (${week_day[$inp_day]}) -> out_date $out_date (${week_day[$query_last_day]})"
}
query_last_date 09-30-2021 1
query_last_date 09-30-2021 2
query_last_date 09-30-2021 3
query_last_date 09-30-2021 4
query_last_date 09-30-2021 5
query_last_date 09-30-2021 6
query_last_date 09-30-2021 7

预期输出如下,

inp_date 09-30-2021 (thu) -> out_date 09-27-2021 (mon)
inp_date 09-30-2021 (thu) -> out_date 09-28-2021 (tue)
inp_date 09-30-2021 (thu) -> out_date 09-29-2021 (wed)
inp_date 09-30-2021 (thu) -> out_date 09-30-2021 (thu)
inp_date 09-30-2021 (thu) -> out_date 09-24-2021 (fri)
inp_date 09-30-2021 (thu) -> out_date 09-25-2021 (sat)
inp_date 09-30-2021 (thu) -> out_date 09-26-2021 (sun)

最新更新