Получить дату последнего дня последнего месяца в сценарии оболочки

Как получить дату окончания предыдущего месяца на основе даты обработки?

Примеры:

  • Дата обработки = 15jan2015
  • Ожидаемая дата = 31dec2014,

  • Дата обработки = 10feb2015
  • Ожидаемая дата = 31jan2015

4 Solutions collect form web for “Получить дату последнего дня последнего месяца в сценарии оболочки”

date GNU:

 $ date +%d%b%Y 16Aug2015 $ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y 31Jul2015 

Некоторые оболочки имеют встроенную поддержку для обработки даты:

С ksh93 :

 $ printf "%(%d%b%Y)T\n" "1st day, yesterday" 31Jul2015 

С zsh :

 $ zmodload zsh/datetime $ strftime -sd %Y-%m-01-12 $EPOCHSECONDS $ strftime -rs d %Y-%m-%d-%H $d $ strftime %d%b%Y $((d-86400)) 31Jul2015 

Есть много способов сделать это; вот самый простой, который я нашел (здесь предполагается date GNU):

 $ date -d "-$(date +%d) days" Fri Jul 31 16:07:23 EDT 2015 

Вот версия, которая работает на Mac OS, которая использует утилиту date BSD:

date -v1d -v-1d +%d%b%Y

Аргументы применяются по порядку. Вы можете себе представить, что дата передается от одного аргумента к другому. Например:

  • Начать с текущей даты ( date ) -> 2017-03-06
  • Установите эту дату на 1-й день своего месяца ( -v1d ) -> 2017-03-01
  • Вычтите один день из этого ( -v-1d) -> 2017-02-28
  • Отформатируйте дату ( +%d%b%Y ) -> 28Feb2017

Вы можете достичь любого количества месяцев вперед или назад, используя date -v-1m -v1d -v-1d , заменив -1m на количество месяцев назад или вперед ( +1m ), которое вы хотите.

Это общий ответ. Этот вопрос конкретно задает даты относительно даты начала. Утилита даты Mac OS / BSD не позволяет вам указывать дату начала, но вы можете установить каждый элемент даты отдельно:

date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y -> 31Dec2014

Попробуйте использовать этот код

 date -d "-$(date +%d) days month" +%Y-%m-%d 
  • FTP-подключение к удаленному каталогу
  • Как использовать команды в файлах, начинающиеся с «-»
  • не может определить ошибку в сценарии оболочки неожиданный оператор
  • case multi-pattern со строками
  • Как удалить лишний «мусор» из этого файла журнала?
  • фоновый gui-процесс в сценарии оболочки
  • Сценарий Bash Не меняющийся каталог
  • Есть ли способ, которым я могу запутать сценарий оболочки «.sh»?
  • Как закончить сценарий оболочки?
  • Как перенаправить стандартный ввод инструкции `while` в файл?
  • и всегда эквивалентны?
  • проблема с mysql backup и rsync
  • Interesting Posts

    Как отлаживать пользовательское действие Thunar

    Как настроить xlock для поиска шрифтов?

    Перенаправить консоль Linux при загрузке

    Arch Linux cfdisk запрашивает тип метки диска

    Как я могу понять, почему устройство HID unikey не распознается программным обеспечением, требующим его?

    Linux, resolv.conf – добавление серверов MSDNS и Bind DNS, где MSDNS не является рекурсивным?

    что такое служба dhcpv6-client в firewalld, и могу ли я безопасно удалить ее?

    Почему в моем Ubuntu 14.04 bash используется оболочка по умолчанию?

    Безопасно хранить постоянные данные в / var / app_name /

    Устранение неполадок установки Fedora 24, которая работает только на виртуальной машине

    Как я могу запретить кому-то получать root-доступ через загрузчик?

    Возможно ли изменить размер текущего активного раздела и как это сделать?

    Является ли это возможным? Три моста Firewall с OpenBSD 6.0 с одним сервером OpenBSD?

    Добавление имени dir в список файлов

    Расширения файлов и связь с программами в Linux

    Linux и Unix - лучшая ОС в мире.