2013-02-19 13 views
5

z jakiegoś powodu, to porównanie nie zawsze należy to sprawdzić z konsoli Rails:porównanie DateTime nie w 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 

Jak to się stało, że porównanie jest zawsze źle? Próbowałem to także:

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

Rezultatem było prawdą, jak również, gdy jest oczywiste, że to ma być fałszywe od 23:48> 23:15:00.

Należy pamiętać, że używam rubin rubin 1.9.3p0 pod Ubuntu i Rails 3.1

Każda pomoc będzie bardzo mile widziane

+1

'@game.game_date.to_datetime> Czasu .zone.now' zamiast (używając swojej strefy czasowej) – MrYoshiji

+0

wypróbowany, ten sam wynik, który jest prawdziwy. Time.zone.now dał mi (wtorek, 19 lutego 2013 20:47:24 UTC +00: 00) i @ game.game_date.to_datetime (wtorek, 19 lutego 2013 23:15:00 +0000) –

+1

DateTime.now daje czas w twojej strefie czasowej. W tym przypadku strefa czasowa to '+ 0330', co oznacza, że ​​bieżącym czasem UTC będzie" Wt, 19 lutego 2013 20:18:38 + 0000 ", który jest mniejszy niż' Wt, 19 lutego 2013 23:15:00 + 0000' . –

Odpowiedz

7

Masz problem z Strefa czasowa:

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 

Twój atrybut game_date ma strefę czasową +0000, gdy DateTime.now ma +0330

Spróbuj tego:

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

ten sam wynik, prawda, Time.zone.now dał mi (wtorek, 19 lutego 2013 20:47:24 UTC +00: 00) i @ game.game_date.to_datetime (wtorek, 19 Feb 2013 23:15:00 +0000) –

+0

To prawda, że ​​20:47 jest wcześniej niż 23:15. prawda? – MrYoshiji

+0

cóż, prawda, ale jak mam to zmienić, mam na myśli ustawienie strefy czasowej? –

0

Udało mi się w ten sposób, tak czy inaczej nie wiem, czy to jest najlepszy sposób, ale przynajmniej działa tak, jak oczekuję go:

@game.game_date.to_datetime > Time.now.to_datetime.change(:offset => "+0000") 
Powiązane problemy