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 สำหรับคำแนะนำและการแก้ไขปัญหาจากชุมชน