2013-02-19 26 views
5

Đối với một số lý do, sự so sánh luôn luôn thất bại, hãy kiểm tra này ra từ Rails console:DateTime so sánh thất bại trong Rails

irb(main):021:0> @game.game_date.class 
=> ActiveSupport::TimeWithZone 
irb(main):026:0> @game.game_date 
=> Tue, 19 Feb 2013 23:15:00 UTC +00:00 
irb(main):022:0> @game.game_date.to_datetime 
=> Tue, 19 Feb 2013 23:15:00 +0000 
irb(main):019:0> DateTime.now 
=> Tue, 19 Feb 2013 23:48:38 +0330 
irb(main):020:0> @game.game_date.to_datetime > DateTime.now 
=> true 

Tại sao mà so sánh luôn luôn là sai trái? Tôi cố gắng này cũng như:

@game.game_date.to_time > Time.now.to_tim 

Kết quả là đúng là tốt, trong khi rõ ràng là nó được coi là sai vì 23:48> 23:15:00.

Xin lưu ý rằng tôi đang sử dụng ruby ​​ruby ​​1.9.3p0 dưới ubuntu và Rails 3.1

Bất kỳ trợ giúp sẽ được đánh giá cao

+1

'@game.game_date.to_datetime> Time .zone.now' thay vào đó (sử dụng múi giờ của bạn) – MrYoshiji

+0

đã thử, kết quả tương tự, điều đó đúng. Time.zone.now đã cho tôi (Thứ Ba, ngày 19 tháng 2 năm 2013 20:47:24 giờ UTC: 00) và @ game.game_date.to_datetime (Thứ Ba, ngày 19 tháng 2 năm 2013 23:15:00 +0000) –

+1

DateTime.now cung cấp thời gian trong múi giờ của bạn. Vì vậy, trong trường hợp này múi giờ là '+ 0330' có nghĩa là thời gian UTC hiện tại sẽ là' Thứ Ba, ngày 19 tháng 2 năm 2013 20:18:38 + 0000' nhỏ hơn 'Thứ Ba, ngày 19 tháng 2 năm 2013 23:15:00 + 0000' . –

Trả lời

7

Bạn có một vấn đề với các TimeZone:

irb(main):022:0> @game.game_date.to_datetime 
=> Tue, 19 Feb 2013 23:15:00 +0000 
irb(main):019:0> DateTime.now 
=> Tue, 19 Feb 2013 23:48:38 +0330 

Bạn thấy, thuộc tính game_date của bạn có một múi giờ +0000, khi DateTime.now có một số +0330

Hãy thử cách này:

@game.game_date.to_datetime > Time.zone.now 
+0

kết quả tương tự, đúng, Time.zone.now đã cho tôi (Thứ Ba, ngày 19 tháng 2 năm 2013 20:47:24 giờ UTC: 00) và @ game.game_date.to_datetime (Thứ Ba, 19 Tháng 2 năm 2013 23:15:00 +0000) –

+0

Vâng, sự thật ở đó là 20:47 sớm hơn 23:15. phải không? – MrYoshiji

+0

Vâng, đúng vậy, nhưng làm thế nào tôi phải thay đổi nó, tôi có nghĩa là để thiết lập múi giờ? –

0

Nó làm việc với tôi theo cách này, dù sao không chắc chắn nếu nó là cách tốt nhất nhưng ít nhất làm việc theo cách tôi hy vọng nó:

@game.game_date.to_datetime > Time.now.to_datetime.change(:offset => "+0000") 
Các vấn đề liên quan