เปรียบเทียบสองวันที่

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 กรณีพิเศษ เช่น วินาทีขาดหรือการเปลี่ยนแปลงเวลาออมแสงอาจนำมาซึ่งข้อผิดพลาด

ดูบทความเพิ่มเติม