




Вы можете просто указать это с помощью аргумента -d.
то есть date -d "today 23:59:59" +%s
где сегодня 23:29:59 используется для получения конца текущего дня
Редактировать: @ Тоби предлагает следующий подход для правильной обработки дополнительных секунд -d 'tomorrow 0 -1second
Если вы хотите в начале дня использовать
date -d "today 0" +%s
Это предполагает GNU date, поскольку -d не является стандартом.
Это неверно для систем, которые правильно обрабатывают дополнительные секунды (где последняя минута дня может составлять 61 секунду). Вам действительно нужен -d 'tomorrow 0 -1second'.
Используя BSD date, вы можете использовать -v для правильной настройки времени.
% date
Tue May 22 09:21:50 EDT 2018
% date -v 23H -v 59M -v 59S
Tue May 22 23:59:59 EDT 2018
Немного дольше, но избавляет вас от необходимости помнить, сколько часов в дне, минут в часе и т. д., Переходя к полуночи завтра, а затем вычитая одну секунду.
% date -v +1d -v 0H -v 0M -v -0S -v -1S
^ ^ ^ ^ ^
| | | | |
| +-----+------+ subtract one second
| |
| reset to midnight
|
go to tomorrow
(Жаль, что -v не может принимать комбинацию. date -v+1d0H0MS-1S было бы неплохо набрать. Это не слишком читабельно или очевидно, но легко разбирается, если вы знаете, как работает -v. Пробел сделает это лучше: date -v "+1d 0H 0M 0S -1S". #Wishfulthinking)
Простой, но хрупкий подход - просто округлить до ближайшего числа, кратного 86400:
$ now=$(date +%s)
$ end_of_day=$(( now - now%86400 + 86399))
но при этом не будет учитываться летнее время в течение двух дней, когда это может быть актуально.
Это текущая дата местный или текущая дата универсальное глобальное время?