2010-05-12 19 views
28

Haha ..Có thể sử dụng Mãn tính làm suy giảm thời gian của bạn không?

Tôi đang sử dụng Mãn tính để phân tích cú pháp thời gian người dùng thêm vào Lịch. Trong trường hợp mã hoạt động và triển khai đúng thời điểm, kết quả cuối cùng là, NẾU người dùng thêm thời gian, sau đó nó không có ngày và bởi vì nó không có ngày, nó sẽ không hiển thị trong kết quả. Bất kỳ ý tưởng?

def set_dates 
    unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank? 
    # check if we are dealing with a date or a date + time 
    if time_provided?(self.natural_date) 
     self.date = nil 
     self.time = Chronic.parse(self.natural_date) 
    else 
     self.date = Chronic.parse(self.natural_date).to_date 
     self.time = nil 
    end 
    end 

    unless self.natural_end_date.blank? || Chronic.parse(self.natural_end_date).blank? 
    # check if we are dealing with a date or a date + time 
    if time_provided?(self.natural_end_date) 
     self.end_date = nil 
     self.end_time = Chronic.parse(self.natural_end_date) 
    else 
     self.end_date = Chronic.parse(self.natural_end_date).to_date 
     self.end_time = nil 
    end 
    end 
end 

Edit:

Đây là time_provided? Phương pháp:

def time_provided?(natural_date_string) 
    date_span = Chronic.parse(natural_date_string, :guess => false) 
    (date_span.last - date_span.first).to_i == 1 
end 
+10

Tôi phải thừa nhận, khi đọc tiêu đề này, nó làm tôi cười. –

+1

ha! tôi cũng vậy, tôi nghĩ đó là một con troll –

+11

+1 Lúc đầu tôi đã được wtf. Rồi tôi cười. Rồi tôi khóc. Rồi tôi lên cao. – Alan

Trả lời

2

Đầu tiên, tôi không thực sự chắc chắn những gì bạn đang hỏi về, bởi vì nó trông giống như mã cố ý làm những gì bạn mô tả ... Khi có thời gian cung cấp, các trường ngày được giao nil. Và tôi không nghĩ rằng đó là Mạn tính là để đổ lỗi vì đó là cách mã của bạn hoạt động.

Không biết thiết kế của bạn (lý do tại sao có những ngày & lĩnh vực thời gian riêng biệt), các loại lĩnh vực vv, tôi sẽ đề nghị bắt đầu với một kludge chút như thế này:

if time_provided?(self.natural_date) 
    self.time = Chronic.parse(self.natural_date) 
    self.date = self.time.to_date 

hay:

self.end_date = Chronic.parse(self.natural_date).to_date 
if time_provided?(self.natural_date) 
    self.time = Chronic.parse(self.natural_date) 
end 

Hoặc có thể sự cố nằm ngoài mã bạn đã cung cấp: trong phần chịu trách nhiệm về hành vi "vì nó không có ngày, nó sẽ không hiển thị trong kết quả"? Có lẽ bạn nên làm cho các điều kiện linh hoạt hơn?

+0

Giả sử tuyệt vời. Có, tôi thấy rằng mã chắc chắn sẽ không được đặt thành nil. Vì vậy, những gì tôi đã làm được thực hiện phần này ít nhất là không .. self.date = Chronic.parse (self.natural_date) Và, không hoàn toàn chắc chắn những gì đã làm, nhưng ít nhất nó làm cho nó để bạn couldn Không thêm thời gian nữa vì nó không tự động đề xuất một. : D. Câu hỏi thực sự là, có thể tạo ra thời gian và ngày riêng biệt hay không. Vì vậy, nếu họ thêm ngày + giờ, tôi sẽ nhận được cả ngày và ngày + giờ riêng biệt. Ngoài ra, nếu họ chỉ thêm một ngày, sau đó tôi sẽ nhận được một ngày, và một ngày + thời gian mà không có thời gian: D – Trip

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