Формат даты для переменной

Формат даты для переменной

Мне нужно написать переменную с функцией "date" и мне нужно, чтобы формат был yyyymmdd (т.е. 20151031). Также я бы удалил день (т.е. 20151031 станет 20151030). Я бы использовал bash.

Спасибо!

решение1

Используйте date +%Y%m%dдля печати текущей даты.
Используйте date --date '1 day ago' +%Y%m%dдля печати вчерашней даты (GNU date).
Используйте date -v -1d +Y%m%d(FreeBSD).

решение2

В bash-4.2 и выше есть встроенная поддержка для этого (вдохновлено чем-то подобным в ksh93):

printf -v now '%(%s)T' -1
printf '%(%Y%m%d)T\n' "$((now - 86400))"

Выводит вчерашнюю дату (точнее, дату 86400 секунд назад) в формате ГГГГММДД. Может не работать, если запускать в определенные часы ночи во время перехода на зимнее/летнее время (когда продолжительность дня составляет 23 или 25 часов).

Вероятно, для таких особых случаев было бы надежнее записать это так:

printf -v now '%(%s:%H)T' -1
printf '%(%Y%m%d)T\n' "$((${now%:*} - 3600 * (12 + ${now#*:})))"

Связанный контент