Ruby:
เปรียบเทียบสองวันที่
วิธีทำ:
Ruby ทำให้ชีวิตเราง่ายขึ้นด้วยคลาส Date มาดูการทำงานของมันกัน
require 'date'
date1 = Date.new(2023, 3, 14)
date2 = Date.new(2023, 3, 15)
puts date1 == date2 # ผลลัพธ์: false
puts date1 != date2 # ผลลัพธ์: true
puts date1 < date2 # ผลลัพธ์: true
puts date1 > date2 # ผลลัพธ์: false
puts date1 <= Date.today # ผลลัพธ์: ขึ้นอยู่กับวันที่ของวันนี้
puts date1 >= Date.today # ผลลัพธ์: ขึ้นอยู่กับวันที่ของวันนี้
การลงลึก
การเปรียบเทียบวันที่ไม่ใช่เรื่องใหม่ มันเป็นพื้นฐานเหมือนการเปรียบเทียบจำนวนเต็ม แต่มีความซับซ้อนเพราะวันที่มีส่วนประกอบ – วัน, เดือน, ปี ใน Ruby, คลาส Date (จากไลบรารีมาตรฐาน) รับภาระนี้มา จัดการกับเดือน, ปีอธิกสุรทิน, ฯลฯ
คุณได้รู้จักการเปรียบเทียบพื้นฐาน: ==
, !=
, <
, >
, <=
, >=
แต่ Ruby มีอีกมากที่อยู่ใต้ฝาครอบ
Date.parse
สามารถทำความเข้าใจและแปลงวันที่จากสตริงDateTime
ให้ความแม่นยำมากขึ้น, รองรับเวลาและโซนเวลา- ไลบรารีเช่น ‘ActiveSupport’ (จาก Rails) เพิ่มเมธอดที่เกี่ยวข้องกับวันที่มากขึ้น
ระวังข้อผิดพลาด:
- โซนเวลาอาจทำให้คุณพลาดถ้าคุณไม่ระมัดระวัง
- วินาทีอธิกสุรทินไม่ได้ถูกรวมอยู่ในคลาส Date/DateTime มาตรฐานของ Ruby
ทางเลือกที่ไม่ใช่คลาส Date ประกอบด้วย:
- การใช้เวลาหมายเลข (timestamps) และเปรียบเทียบพวกมันเหมือนเลข
- ไลบรารี ’time’ สำหรับการจัดการเวลาที่ซับซ้อนมากขึ้น
การเปรียบเทียบมีความซับซ้อนอย่างรวดเร็ว ถ้าคุณกำลังจัดตารางเวลาและต้องการเปรียบเทียบช่วงเวลา หรือจัดการกับเหตุการณ์ที่เกิดซ้ำ อาจต้องการระดับการทำงานระดับสูงที่สร้างขึ้นบนคลาส Date และ Time ของ Ruby เมธอด between?
ของ ActiveRecord หรือ gems เช่น ‘IceCube’ สำหรับเหตุการณ์ที่เกิดซ้ำอาจช่วยประหยัดเวลาและลดความปวดหัวได้มาก
ดูเพิ่มเติม
- ส่วนขยายของ ActiveSupport: Active Support Core Extensions
- ‘IceCube’ gem สำหรับเหตุการณ์ที่เกิดซ้ำ: IceCube
- คู่มืออย่างละเอียดเกี่ยวกับโซนเวลาใน Ruby: คู่มือโซนเวลา