How do i get last sunday date from a given date in unix

限于喜欢 提交于 2020-01-30 08:02:44

问题


get last sunday date as output from a given date (not current date) as input

Example input: 08-30-2017 (%m-%d-%Y)

output should be last sunday: 08-27-2017

===

All of the below commands use current day as reference .But i want to give the reference date as input to get last sunday. Please help me with the command.

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

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


回答1:


If you deal with a fixed date format %m-%d-%Y, it should be transformed to %Y-%m-%d format to be processed by date function:

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 - interpreted format specificator, day of week (1..7); 1 is Monday




回答2:


I hope this below solution can help you:

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

This will always print the Sunday before the given date (or the date itself).

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

This will always print the Sunday before the given date (and never the date itself).




回答3:


Very simple way-

First calculate dayofweek from given date. It will be 1-7. For Monday it's 1 etc ...Saturday 6 and Sunday 7.

Then subtract dayofweek from given date. That's your last Sunday.

$ 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


来源:https://stackoverflow.com/questions/46015546/how-do-i-get-last-sunday-date-from-a-given-date-in-unix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!