Tôi đã thử làm một cái gì đó như
Time.now + 5.days
nhưng điều đó không hiệu quả, mặc dù tôi mơ hồ nhớ mình đã nhìn thấy, và rất ấn tượng, với việc có thể làm điều gì đó như 2.years
v.v.
Làm cách nào để làm điều đó trong Rails 3?
Tôi đã thử làm một cái gì đó như
Time.now + 5.days
nhưng điều đó không hiệu quả, mặc dù tôi mơ hồ nhớ mình đã nhìn thấy, và rất ấn tượng, với việc có thể làm điều gì đó như 2.years
v.v.
Làm cách nào để làm điều đó trong Rails 3?
Câu trả lời:
Sử dụng
Time.now + 10.days
hoặc thậm chí
10.days.from_now
Cả hai chắc chắn hoạt động. Bạn có chắc mình đang ở trong Rails chứ không chỉ Ruby?
Nếu bạn chắc chắn đang ở trong Rails, bạn đang cố gắng chạy nó từ đâu? Lưu ý rằng Hỗ trợ tích cực phải được tải.
Time.now + 10.days
luôn chọn múi giờ hệ thống của bạn trong khi 10.days.from_now
sẽ chọn múi giờ UTC nếu không có gì được đặt trong cấu hình rails.
Time.zone.now
thay cho Time.now
.
days
, years
v.v., là một phần của Hỗ trợ tích cực, Vì vậy, tính năng này sẽ không hoạt động irb
, nhưng sẽ hoạt động rails console
.
require 'active_support/time'
vào đầu phiên hoặc trước khi bạn sử dụng các lệnh của nó
Một số tùy chọn khác, chỉ để tham khảo
-10.days.ago
# Available in Rails 4
DateTime.now.days_ago(-10)
Chỉ cần liệt kê ra tất cả các tùy chọn mà tôi biết:
[1] Time.now + 10.days
[2] 10.days.from_now
[3] -10.days.ago
[4] DateTime.now.days_ago(-10)
[5] Date.today + 10
Vì vậy, bây giờ, sự khác biệt giữa chúng là gì nếu chúng ta quan tâm đến múi giờ:
[1, 4]
Với múi giờ hệ thống[2, 3]
Với múi giờ cấu hình của ứng dụng Rails của bạn[5]
Chỉ ngày không có thời gian trong kết quảHãy thử điều này trên Rails
Time.new + 10.days
Hãy thử điều này trên Ruby
require 'date'
DateTime.now.next_day(10).to_time