2010-07-23 34 views
16

Tôi muốn viết một chức năng đơn giản để nói theo giờ:Làm thế nào để bạn trừ khỏi một ngày giờ?

Đã bao lâu trôi qua kể từ khi được tạo?

nỗ lực của tôi:

-time = DateTime.now.hour - (self.created_at.hour) 

Có ai biết làm thế nào để làm điều này trong Ruby on Rails?

+0

Điều đó sẽ không hiệu quả vì bạn chỉ so sánh giờ, vì vậy nếu quá một ngày trôi qua thì sẽ không chính xác, nhưng nếu không sẽ vẫn tính đến một số. Thay vào đó, bạn có thể thực hiện 'DateTime.now - self.created_at' trực tiếp, điều này sẽ cho bạn biết sự khác biệt về thời gian tính bằng giây. Bạn cần làm gì? – Karl

+0

Điều đó không hiệu quả vì bạn không thể trừ khỏi DateTime trừ khi nó là một chuỗi. Và nếu đó là một chuỗi, làm thế nào để bạn hiển thị nó như một thời gian một lần nữa – Trip

Trả lời

21

Rails thường sử dụng Time, không DateTime. Tại sao bạn không làm Time.now - self.created_at? Sau đó, bạn có thể chuyển đổi từ giây sang giờ bằng cách chia cho 3600.

7

Bạn đang tìm hàm time_ago_in_words (from_time, include_seconds = false). Dưới đây là một số ví dụ từ các tài liệu:

time_ago_in_words(3.minutes.from_now)  # => 3 minutes 
time_ago_in_words(Time.now - 15.hours)  # => 15 hours 
time_ago_in_words(Time.now)     # => less than a minute 
from_time = Time.now - 3.days - 14.minutes - 25.seconds  # => 3 days 
+4

Tôi không tìm kiếm các từ. Tôi đang xem làm thế nào để trừ một DateTime từ một DateTime – Trip

+1

Trong trường hợp đó mckeed có câu trả lời đúng. – sosborn

16

OK! Trước tiên, bạn phải đảm bảo rằng dữ liệu của mình nằm trong cùng một dữ liệu, dữ liệu đó sẽ được trừ từ một Thời gian hoặc một Ngày giờ. Tôi đã chọn thời gian. Sau đó, bạn chia nó bằng các phương thức thời gian dựng sẵn của Ruby. Điều này dịch vào bao nhiêu ngày, nhưng nó cũng có thể là, 1.hour. v.v.

(Time.now - self.created_at.to_time)/1.day 
Các vấn đề liên quan