如何从unix中的给定日期获取上周日日期

问题描述 投票:0回答:5

获取上周日日期作为给定日期(不是当前日期)作为输入的输出

输入示例:2017 年 8 月 30 日 (%m-%d-%Y)

输出应该是上周日:08-27-2017

===

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

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

日期 +%m-%d-%Y -d“最后一个星期日”

bash shell datetime unix unix-timestamp
5个回答
4
投票

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

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

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

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

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


1
投票

如果处理固定日期格式

%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 是星期一


1
投票

非常简单的方法-

首先计算给定日期的星期几。它将是1-7。周一是 1 等等...周六 6 号和周日 7 号。

然后从给定日期中减去星期几。这是你最后一个周日了。

$ 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

0
投票

这里是查询某个日期(MM-DD-YYYY)中的某一天(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)

0
投票

日期 +"%d-%m-%Y" -d "最后一个星期日"

© www.soinside.com 2019 - 2024. All rights reserved.