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ż:
man date
– manual dla komendy date- Bash Date Command – dokumentacja komendy date GNU
- Advanced Bash-Scripting Guide – poradnik skryptowania w Bashu z rozdziałem o datach
- Stack Overflow – dyskusje i pytania dotyczące użycia dat w Bashu na Stack Overflow