2014-09-26 2 views
1

Есть ли встроенная функция для получения следующего воскресенья (следующий понедельник, вторник и т. Д.) С заданной даты с использованием сценария оболочки bash? Например, какое первое воскресенье после 1 сентября 2014 года? Я ожидаю 7-е сентября 2014 года.Получить следующее воскресенье после указанной даты (bash)

Я искал ответ в гугле, но только нашел эту функцию:

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

, который должен получить следующее воскресенье после того, как сегодня.

ответ

1

Я боюсь date не может сделать это напрямую. Но вы можете использовать расширение скобки, чтобы получить даты для всех 7 дней, и выберите в воскресенье из них:

echo '1-Sep-2014\ +'{1..7}'\ days' | xargs -n1 date -d | grep Sun 
+0

Это отлично работает. Обратите внимание: если вы находитесь в системе unix, убедитесь, что у вас есть дата GNU. Решение homebrew 'brew install coreutils' приведет к дате GNU, названной' gdate'. – PhysicalChemist

+0

Отличный ответ, @choroba :). Кстати, можно ли параметризовать дату (1-сент.-2014), а также день (Солнце). Я пробовал этот код, но возвращаю ошибку: 'echo '$ myDate \ +' {1..7} '\ days' | xargs -n1 date -d | grep $ myDay' – nurandi

+0

Я поставил первую цитату в неправильном положении. Теперь он работает: 'echo $ {myDate} '\ +' {1..7} '\ days' | xargs -n1 date -d | grep $ myDay' – nurandi

1

Вы можете использовать этот небольшой скрипт:

#!/bin/bash 
w=$(date -d"$1" +%w) 
diff=$(((7-$w)%7)) 
date -d"+$diff day $1" +%F 

сохраненного в sun.sh затем:

kent$ ./sun.sh 01-Sep-2014 
2014-09-07 

kent$ ./sun.sh 31-Aug-2014 
2014-08-31 

kent$ ./sun.sh 3-Sep-2014 
2014-09-07 

kent$ ./sun.sh 23-Sep-2014 
2014-09-28 

Обратите внимание, что проверка аргументов не была выполнена, я просто показал, как рассчитать дату.

Смежные вопросы