如何从unix中的给定日期获得最后一个星期日日期

时间:2017-09-02 15:51:14

标签: bash shell datetime unix unix-timestamp

将最后一个星期日日期作为输入从给定日期(非当前日期)作为输入

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

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

===

以下所有命令都使用当天作为参考。但我想将参考日期作为输入以获得最后一个星期日。请帮我解释一下这个命令。

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

日期+%m-%d-%Y -d“last Sun”

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分: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是星期一

答案 2 :(得分:0)

非常简单的方法 -

首先从给定日期算出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