2009-04-12 20 views
5

Tôi có một danh sách các nhiệm vụ (name, starts_at) và tôi đang cố gắng hiển thị chúng trong chế độ xem hàng ngày (giống như iCal).Đường ray: Tìm công việc đã được tạo vào một ngày nhất định?

def todays_tasks(day) 
    Task.find(:all, :conditions => ["starts_at between ? and ?", day.beginning, day.ending] 
end 

Tôi không thể tìm ra cách chuyển đổi Time.now như "2009-04-12 10:00:00" thành đầu (và kết thúc) trong ngày để tôi có thể so sánh .

Trả lời

11
def todays_tasks(now = Time.now) 
    Task.find(:all, :conditions => ["starts_at > ? AND < ?", now.at_beginning_of_day, now.at_end_of_day]) 
end 

Thì đấy!

+0

Xin chào @august, tôi thấy at_end_of_day đang bẻ khóa, vì vậy tôi đã sử dụng chỉ vào end_of_day –

3

Mở rộng câu trả lời của augustl một chút. Trong mô hình Task, bạn có thể xác định phương thức để tìm nạp các tác vụ này cho bạn.

def self.todays_tasks(t = Time.now) 
    Task.all(:conditions => ["created_at > ? AND created_at < ?", t.at_beginning_of_day, t.tomorrow.at_beginning_of_day]) 
    end 

Điều này giúp giữ bộ điều khiển của bạn gầy. Tôi cũng so sánh cuối ngày với đầu ngày mai. Điều này đảm bảo rằng nếu người dùng tạo một tác vụ lúc 11:59:59 giờ thì nó vẫn còn đúng vào ngày đó.

0

Nó sẽ không thể:

Task.all(:conditions => ["created_at >= ? AND created_at < ?", Time.now.at_beginning_of_day, Time.now.tomorrow.at_beginning_of_day]) 

Hoặc nếu không bạn sẽ không bao giờ kiểm tra 0:00:00 vào ngày nhiệm vụ, 11:59:59 là giá trị cuối cùng vào cuối của ngày của nhiệm vụ.

0
def todays_tasks(day) 
    Task.where(:created_at => day.beginning_of_day .. day.end_of_day) 
end 
Các vấn đề liên quan