ruby 1.9.3dev (2011/09/23 sửa đổi 33.323) [i686-linux]Rails trên các giá trị đối tượng ngày trở lại bởi date.end_of_day.to_datetime và date.to_datetime.end_of_day khi so sánh lợi nhuận sai
ray 3.0.20
Gần đây tại sao làm việc trên một dự án trên RSpecs liên quan đến DateTime on Rails tôi phát hiện ra rằng vào một ngày cụ các giá trị phát ra bởi câu sau đây
date.end_of_day.to_datetime
và
date.to_datetime.end_of_day
khi so sánh trở sai dù họ đại diện giống hệt ngày thời gian.
Để khẳng định điều này tôi đã mở ra Rails giao diện điều khiển và cố gắng ra sau
1.9.3dev :053 > monday = Time.now.monday
=> 2013-02-25 00:00:00 +0530
1.9.3dev :054 > monday.class
=> Time
1.9.3dev :055 > d1 = monday + 1.hour
=> 2013-02-25 01:00:00 +0530
1.9.3dev :056 > d2 = monday + 1.hour
=> 2013-02-25 01:00:00 +0530
1.9.3dev :058 > d1_eod_datetime = d1.end_of_day.to_datetime
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :059 > d2_eod_datetime = d2.to_datetime.end_of_day
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :061 > d1_eod_datetime == d2_eod_datetime
=> false
1.9.3dev :062 > d3_eod_datetime = d2.to_datetime.end_of_day
=> Mon, 25 Feb 2013 23:59:59 +0530
1.9.3dev :063 > d2_eod_datetime == d3_eod_datetime
=> true
và có vẻ như quan sát của tôi trông correct.That là:
Khi d1_eod_datetime và d2_eod_datetime được so sánh nó trả về false
Khi d2_eod_datetime và d3_eod_datetime là compa đỏ nó trả về true
Nó trông giống như một hành vi không phù hợp với tôi, tuy nhiên sẽ đánh giá cao nếu ai cũng có thể làm cho tôi hiểu những gì đang xảy ra đằng sau hậu trường và tại sao so sánh được thực hiện trên các giá trị sử dụng date.end_of_day. to_datetime và date.to_datetime.end_of_day không thành công mặc dù nguồn ngày đối tượng đại diện cho ngày giờ giống nhau.
Cảm ơn,
Jignesh
Xem câu hỏi liên quan: http://stackoverflow.com/questions/8763050/how-to-compare-time-in-ruby – kristinalim