Сравнение двух дат

Bash:
Сравнение двух дат

Как это сделать:

Вот быстрый способ сравнения двух дат в Bash:

date1="2023-04-01"
date2="2023-04-15"

# Преобразование дат в секунды с начала эпохи
sec1=$(date -d "$date1" +%s)
sec2=$(date -d "$date2" +%s)

# Сравнение дат
if [ $sec1 -eq $sec2 ]; then
    echo "Даты совпадают."
elif [ $sec1 -lt $sec2 ]; then
    echo "Дата $date1 раньше чем $date2."
else
    echo "Дата $date1 позже чем $date2."
fi

Пример вывода, если $date2 позже:

Дата 2023-04-01 раньше чем 2023-04-15.

Более подробно

Исторически, сравнение дат в скриптах оболочки было неочевидным из-за различных форматов дат и отсутствия встроенных функций. Команда date с использованием %s для преобразования дат в секунды с момента Unix эпохи (00:00:00 UTC 1 января 1970 года) - это настоящая находка.

Альтернативы включают использование внешних инструментов, таких как awk, или сравнение строк - рискованно, если форматы различаются. С точки зрения реализации, один из нюансов - работа с часовыми поясами: добавление TZ=UTC перед командами date гарантирует сравнение в UTC.

Арифметика дат, такая как нахождение разницы между датами, может быть сложной. Добавление или вычитание дней требует дополнительных хитростей с date. Особые случаи, такие как високосные секунды или переходы на летнее время, могут вносить ошибки.

Смотрите также