Bash:
So sánh hai ngày
Cách thực hiện:
Dưới đây là một cách nhanh chóng để so sánh hai ngày trong Bash:
ngay1="2023-04-01"
ngay2="2023-04-15"
# Chuyển đổi các ngày thành số giây kể từ thời điểm đầu (epoch)
giay1=$(date -d "$ngay1" +%s)
giay2=$(date -d "$ngay2" +%s)
# So sánh các ngày
if [ $giay1 -eq $giay2 ]; then
echo "Các ngày giống nhau."
elif [ $giay1 -lt $giay2 ]; then
echo "Ngày $ngay1 sớm hơn $ngay2."
else
echo "Ngày $ngay1 muộn hơn $ngay2."
fi
Kết quả mẫu nếu $ngay2
muộn hơn:
Ngày 2023-04-01 sớm hơn 2023-04-15.
Khám phá sâu hơn
Trong lịch sử, việc so sánh các ngày trong kịch bản shell không phải là điều dễ dàng do sự khác biệt về định dạng ngày và thiếu các hàm được xây dựng sẵn. Lệnh date
, với %s
để chuyển đổi các ngày thành giây kể từ thời điểm Unix epoch (00:00:00 UTC ngày 1 tháng 1 năm 1970), thực sự là một vị cứu tinh.
Các phương pháp thay thế bao gồm sử dụng các công cụ bên ngoài như awk
hoặc so sánh chuỗi - rủi ro nếu định dạng thay đổi. Về mặt triển khai, một điều kỳ quặc là xử lý các múi giờ: thêm TZ=UTC
trước các lệnh date
đảm bảo so sánh UTC.
Toán học với ngày, như việc tìm sự khác biệt giữa các ngày, có thể trở nên phức tạp. Thêm hoặc bớt ngày đòi hỏi nhiều thủ thuật với lệnh date
hơn. Các trường hợp ngoại lệ, như giây nhuận hoặc sự chuyển đổi giờ tiết kiệm ánh sáng, có thể gây ra lỗi.
Xem thêm
- Trang hướng dẫn
date
cho các tùy chọn định dạng. - Stack Overflow cho kiến thức cộng đồng và khắc phục sự cố.