date #Текущая дата
date -d '2010-12-11 12:00' # дата, указанная в строке
date --date='2010-12-11 12:00' #альтернативный вариант опции -d
Примеры дат:
Можно подсмотреть различные форматы дат командой strings $(which date)
Форматы
date +%Y-%m-%d # год-месяц-день
date +%H:%M:%S # часы:минуты:секунды
date +%s # Секунды с 1970-01-01
date +%A # Название дня недели в текущей локали
Стандартные форматы
date -I # ISO-8601 YYY-mm-dd Длинная форма опции — --iso-8601
date -Ihours # ISO-8601 с указанием точности представления даты. Можно указывать date (по умолчанию), hours, minutes, seconds, ns
date -R # Оно же --rfc-email — формат принятый в заголовках электронной почты
Проблема начала недели
В Европе и в России первый день недели понедельник, в США — воскресенье, поэтому для дня недели используются два разных формата
%u – номер дня недели начиная с понедельника (1..7). Воскресенье = 7.
%w – номер дня недели начиная с воскресенья (0..6). Воскресенье = 0.
При описании запуска заданий по расписанию в файле crontab
для воскресенья можно использовать и 0 и 7.
Вычисления с датами с помощью date
date -date='now + 3 days'
date -date='now + 5 hours'
Вычисления в секундах во внешней программе
START=$(date --date='2020-01-01 0:00' +%s)
END=$((START+3600*24*45)) # + 45 дней
date --date="@$END"
Функции перевода времени в секунды и назад в mysql
select UNIX_TIMESTAMP(date) as stamp;
select FROM_UNIXTIME(stamp) as date;