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
การทำลึก
ในอดีตการเปรียบเทียบวันที่ในสคริปต์ Shell ไม่ได้เป็นเรื่องตรงไปตรงมา เนื่องจากมีรูปแบบวันที่ต่างๆ และขาดฟังก์ชันที่ใช้ได้โดยตรง คำสั่ง date
พร้อมกับ %s
เพื่อแปลงวันที่เป็นวินาทีนับจากยุค Unix (00:00:00 ยูทีซี เมื่อวันที่ 1 มกราคม 1970) เป็นการช่วยเหลือครั้งใหญ่
ทางเลือกอื่นๆ ได้แก่การใช้เครื่องมือภายนอกเช่น awk
หรือการเปรียบเทียบสตริง – เสี่ยงหากรูปแบบไม่ตรงกัน ในด้านการทำงาน มีจุดที่เป็นเอกลักษณ์คือการจัดการกับเขตเวลา: เพิ่ม TZ=UTC
ก่อนคำสั่ง date
ช่วยให้การเปรียบเทียบใช้เวลายูทีซี
การคำนวณคณิตศาสตร์วันที่ เช่น การหาความแตกต่างระหว่างวันที่ อาจซับซ้อนได้ การเพิ่มหรือลบวันต้องการเทคนิคเพิ่มเติมจากคำสั่ง date
กรณีพิเศษ เช่น วินาทีขาดหรือการเปลี่ยนแปลงเวลาออมแสงอาจนำมาซึ่งข้อผิดพลาด
ดูบทความเพิ่มเติม
- หน้าคู่มือ
date
สำหรับตัวเลือกรูปแบบ - Stack Overflow สำหรับคำแนะนำและการแก้ไขปัญหาจากชุมชน