【问题标题】:How do i get last sunday date from a given date in unix我如何从unix中的给定日期获取上周日的日期
【发布时间】:2017-09-02 15:51:13
【问题描述】:

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

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

输出应该是最后一个星期日:08-27-2017

===

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

date +%m-%d-%Y -d "2017-09-10 -7 days"

date +%m-%d-%Y -d "last Sun"

【问题讨论】:

  • 在你这边输入日期会一直是%m-%d-%Y这样的格式吗?

标签: bash shell datetime unix unix-timestamp


【解决方案1】:

我希望下面的解决方案可以帮助你:

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

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

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

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

【讨论】:

  • 从给定日期获取上周一?应该改变什么?就像我想要最后一个周日,周一,周二,周三.. 直到作为输入给出的日期。请帮我解决这个问题
  • @DivyaS 获得星期一:date -d "$day -$(date -d $day +%u) days + 1 day" 并继续增加星期二和星期三的天数。试试这个。
  • 上次编辑已恢复。你为什么复制/粘贴@RomanPerekhrest 的答案?
  • @Toto 我没有复制任何人的答案老兄!检查我发布/编辑答案的时间,然后检查另一个人的答案。将其恢复为我的编辑。
【解决方案2】:

很简单的方法-

首先从给定日期计算星期几。这将是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

【讨论】:

    【解决方案3】:

    如果处理固定日期格式%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 是星期一

    【讨论】:

    • 从给定日期获取上周一?应该改变什么?就像我想要最后一个周日,周一,周二,周三.. 直到作为输入给出的日期。请帮我解决这个问题。
    • @DivyaS,尝试像我的方法一样使用变量d,你会看到
    • 是的,我做了一个复制粘贴。它工作正常。谢谢。
    【解决方案4】:

    这是从某天(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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多