Bash:
Porównywanie dwóch dat

How to: - Jak to zrobić:

# Porównanie dwóch dat
date1="2023-04-01"
date2="2023-04-10"

# Konwersja dat na sekundy od epoki i porównanie
sec1=$(date -d "$date1" +%s)
sec2=$(date -d "$date2" +%s)

if [ "$sec1" -eq "$sec2" ]; then
  echo "Daty są identyczne."
elif [ "$sec1" -lt "$sec2" ]; then
  echo "Data pierwsza ($date1) jest wcześniejsza niż data druga ($date2)."
else
  echo "Data druga ($date2) jest wcześniejsza niż data pierwsza ($date1)."
fi

# Różnica w dniach
diff=$(( (sec2 - sec1) / 86400 ))
echo "Różnica między datami to $diff dni."

Przykładowy wynik:

Data pierwsza (2023-04-01) jest wcześniejsza niż data druga (2023-04-10).
Różnica między datami to 9 dni.

Deep Dive - W głąb tematu:

Historia poleceń związanych z datą w systemach uniksowych sięga lat 70. Unix używał “czasu epoki”, zaczynając liczyć od 1 stycznia 1970 roku. Bash, jako powłoka, przyjął tę konwencję. Alternatywnie, możemy użyć dateutils lub GNU coreutils dla zaawansowanych operacji z datami w Bashu.

Dla większej precyzji, możemy operować na sekundach, minutach, godzinach. Ważne jest też, że różne systemy mogą używać różnych stref czasowych, a porównywanie dat może się skomplikować, gdy musimy je uwzględnić.

Warto również zwrócić uwagę, że składnia date się różni między systemami (np. MacOS a Linux) - na MacOS zamiast -d należy użyć '-v'.

See Also - Zobacz również: