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

后端 未结 3 1495
南旧
南旧 2021-01-07 04:01

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

相关标签:
3条回答
  • 2021-01-07 04:08

    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).

    0 讨论(0)
  • 2021-01-07 04:12

    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
    
    0 讨论(0)
  • 2021-01-07 04:13

    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

    0 讨论(0)
提交回复
热议问题