Ruby:
So sánh hai ngày
Cách thực hiện:
Ruby làm cho cuộc sống của chúng ta trở nên đơn giản hơn với lớp Date. Hãy xem nó hoạt động như thế nào.
require 'date'
date1 = Date.new(2023, 3, 14)
date2 = Date.new(2023, 3, 15)
puts date1 == date2 # Đầu ra: false
puts date1 != date2 # Đầu ra: true
puts date1 < date2 # Đầu ra: true
puts date1 > date2 # Đầu ra: false
puts date1 <= Date.today # Đầu ra: tùy thuộc vào ngày hôm nay
puts date1 >= Date.today # Đầu ra: tùy thuộc vào ngày hôm nay
Sâu hơn
So sánh ngày không phải là điều mới. Nó cơ bản như so sánh số nguyên, nhưng khó hơn vì ngày có các phần—ngày, tháng, năm. Trong Ruby, lớp Date (từ thư viện chuẩn) gánh vác, xử lý với tháng, năm nhuận, v.v.
Bạn đã thấy các so sánh cơ bản: ==
, !=
, <
, >
, <=
, >=
. Nhưng Ruby còn nhiều điều hơn nữa ẩn bên dưới.
Date.parse
có thể hiểu và chuyển đổi ngày từ chuỗi.DateTime
cung cấp độ chính xác cao hơn, với hỗ trợ thời gian và múi giờ.- Thư viện như ‘ActiveSupport’ (từ Rails) thêm nhiều phương thức liên quan đến ngày nữa.
Cẩn thận với bẫy:
- Múi giờ có thể khiến bạn mắc lỗi nếu bạn không cẩn thận.
- Giây nhuận không được tính trong các lớp Date/DateTime chuẩn của Ruby.
Các phương án thay thế cho lớp Date bao gồm:
- Sử dụng timestamp và so sánh chúng như số.
- Thư viện ’time’ cho việc xử lý thời gian nâng cao hơn.
So sánh trở nên phức tạp nhanh chóng. Nếu bạn đang lên lịch và cần so sánh các phạm vi ngày, hoặc xử lý các sự kiện định kỳ? Các trừu tượng hóa cấp cao hơn được xây dựng trên Date và Time của Ruby thường là cần thiết. Phương thức between?
của ActiveRecord hoặc các gem như ‘IceCube’ cho các sự kiện định kỳ có thể tiết kiệm rất nhiều thời gian và tránh được nhức đầu.
Xem thêm
- Mở rộng của ActiveSupport: Active Support Core Extensions
- Gem ‘IceCube’ cho các sự kiện định kỳ: IceCube
- Hướng dẫn toàn diện về múi giờ trong Ruby: Hướng dẫn về múi giờ