Мне нужно написать переменную с функцией "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#*:})))"