Как получить дату окончания предыдущего месяца на основе даты обработки?
Примеры:
- Дата обработки = 15 января 2015
- Ожидаемая дата = 31 декабря 2014 года,
- Дата обработки = 10 фев2015
- Ожидаемая дата = 31 января 2015
shell-script
user128856
источник
источник
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Вы получаете ошибку, потому что там не было 2011-12-30. То есть смещение дня было сделано по календарному времени. 2011-12-31 минус 31 день дает вам 2011-11-30, потому что 31 снимается с 31. Это не занимает 31 * 24 * 60 * 60 * 60 секунд от текущего времени. Сравните с тем,TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
что дает вам 29-е, то есть на этот раз, дату, когда это было 24 * 60 * 60 * 60 секунд назад.Вот версия, которая работает на Mac OS, которая использует
date
утилиту BSD :date -v1d -v-1d +%d%b%Y
Аргументы применяются по порядку. Вы можете себе представить, что дата передается от одного аргумента к другому. Например:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
) -> 28 февраля2017Вы можете использовать любое количество месяцев вперед или назад
date -v-1m -v1d -v-1d
, заменяя-1m
количество месяцев назад или вперед (+1m
) по вашему желанию.Это общий ответ. Этот вопрос конкретно спрашивает о датах относительно даты начала. Утилита дат Mac OS / BSD не позволяет указывать дату для запуска, но вы можете установить каждый элемент даты отдельно:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31 декабря 2014 годаисточник
Попробуйте использовать этот код
источник