2011-11-11 24 views
25

Làm việc với ứng dụng Rails 3. Với một DateTime, tôi cần phải tạo ra ngày giờ cho chủ nhật trước đó. Nếu DateTime là một chủ nhật, sau đó tôi muốn rằng chủ nhật chính nó trở lại. Dưới đây là một số ví dụ:Đường ray Chủ Nhật trước đó liên quan đến bất kỳ thời gian hẹn giờ

 
November 7, 2011 => November 6, 2011 
November 6, 2011 => November 6, 2011 
November 5, 2011 => October 30, 2011 

Bất kỳ ý tưởng nào? Tôi hơi bị kẹt.

Trả lời

34
class DateTime 
    def previous_sunday 
    self - wday 
    end 
end 

... nhưng điều này là dễ dàng như vậy, không có lý do gì để khỉ vá nó vào lớp :)

irb(main):001:0> require 'date'; now = DateTime.now 
#=> #<DateTime: 2011-11-10T21:10:04-07:00 (…)> 
irb(main):002:0> sunday = now - now.wday 
#=> #<DateTime: 2011-11-06T21:10:04-07:00 (…)> 

Các wday (ngày trong tuần) sẽ 0 cho bất kỳ chủ nhật, và do đó không thay đổi ngày sẽ diễn ra.

+0

ảnh vui nhộn. Cảm ơn! – Mike

+1

Thay vì DateTime.now, tôi muốn sử dụng Date.today. – Sprachprofi

+1

@Sprachprofi Có, nhưng OP đã yêu cầu một 'DateTime', không phải là' Date'. – Phrogz

36

Rails có một phương pháp tiện lợi để tính toán đầu tuần.

irb(main):001:0> Date.today.beginning_of_week(:sunday) 
#=> Sun, 16 Dec 2012 

Xem Date Rails phần mở rộng cho khả năng khác: http://api.rubyonrails.org/classes/Date.html

+1

điều này thật tuyệt vời! – shicholas

Các vấn đề liên quan