将最后一个星期日日期作为输入从给定日期(非当前日期)作为输入
输入示例:08-30-2017(%m-%d-%Y)
输出应该是最后一个星期日:08-27-2017
===
以下所有命令都使用当天作为参考。但我想将参考日期作为输入以获得最后一个星期日。请帮我解释一下这个命令。
日期+%m-%d-%Y -d“2017-09-10 -7天”
日期+%m-%d-%Y -d“last Sun”
答案 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