การคำนวณวันที่ในอนาคตหรืออดีต

Ruby:
การคำนวณวันที่ในอนาคตหรืออดีต

วิธีการ:

Ruby ทำให้การเล่นกับวันที่ง่ายดายโดยใช้คลาส Date ในตัวและ gem active_support เพื่อเพิ่มความสะดวกในการใช้งาน เรามาดูวิธีทำกัน:

require 'date'
require 'active_support/core_ext/integer'

# รับวันที่ของวันนี้
today = Date.today
puts "วันนี้คือ: #{today}"

# คำนวณวันที่ในอนาคต 10 วัน
future_date = today + 10
puts "10 วันข้างหน้าจะเป็น: #{future_date}"

# คำนวณวันที่ในอดีต 30 วัน
past_date = today - 30
puts "30 วันที่แล้วเป็น: #{past_date}"

# การคำนวณที่ซับซ้อนมากขึ้นกับ active_support
puts "ใน 2 เดือนข้างหน้าจะเป็น: #{2.months.from_now.to_date}"
puts "100 วันที่แล้วมันเป็น: #{100.days.ago.to_date}"

ผลลัพธ์ที่ตัวอย่าง:

วันนี้คือ: 2023-04-07
10 วันข้างหน้าจะเป็น: 2023-04-17
30 วันที่แล้วเป็น: 2023-03-08
ใน 2 เดือนข้างหน้าจะเป็น: 2023-06-07
100 วันที่แล้วมันเป็น: 2022-12-28

รายละเอียดเพิ่มเติม

ก่อนที่ Ruby จะรวมฟังก์ชันการคำนวณวันที่เข้ากับไลบรารีมาตรฐานและเพิ่มเติม, นักพัฒนามักต้องคำนวณวันที่ด้วยตัวเอง โดยพิจารณาถึงปีอธิกสุรทิน, ความยาวของเดือนที่ต่างกัน, และโซนเวลา—ใช่, เป็นเรื่องที่ปวดหัว

คลาส Date มาตรฐานทำสิ่งต่าง ๆ ได้มากโดยตรง คุณสามารถเพิ่ม (+) หรือหัก (-) วันได้อย่างง่ายดาย อย่างไรก็ตาม, สำหรับการจัดการช่วงเวลาที่มีความหมายมากขึ้นเช่น “2 เดือนจากนี้”, เราต้องพึ่งพา active_support, ซึ่งแยกออกมาจาก Ruby on Rails บรรจุภัณฑ์นี้ใช้การขยายคลาส Ruby มาตรฐาน, ทำให้การคำนวณเหล่านี้เป็นมิตรกับผู้ใช้

เมื่อคำนวณวันที่ในอดีตหรืออนาคต, ถ้าคุณยังคำนวณเวลาด้วย (DateTime หรือ Time อ็อบเจกต์) คุณควรพิจารณาถึงโซนเวลาด้วย คลาส Time ของ Ruby และ active_support สามารถจัดการกับสิ่งนี้ได้ แต่ต้องการการตั้งค่าเพิ่มเติม

มีตัวเลือกอื่น ๆ เช่น บรรจุภัณฑ์ time-lord และ ice_cube, ที่นำเสนอการหวานปากหรือคุณสมบัติเฉพาะ (เช่น เหตุการณ์ที่เกิดซ้ำ), ตามลำดับ

ดูเพิ่มเติมที่