Время и зоны в областях Rails - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть область видимости

scope :active_on_a_date, lambda { |date| where(:starts_at.gteq => date, :ends_at.lteq => date)}

Будет ли прошедшая дата преобразована в UTC сама по себе ??Или кто-нибудь может объяснить, как происходит сравнение дат.
Дата, которую я передаю, - это Time.zone.now, который находится в IST +5.30 часов

1 Ответ

3 голосов
/ 02 ноября 2011

Activerecord преобразует местный часовой пояс в UTC и обратно для вас.

Пример из моего производственного приложения.

У меня есть этот набор в моем приложении.rb

config.time_zone = 'Wellington'

(Это хорошая идея, чтобы четко указать часовой пояс приложения)

Так что в моем случае:

> Time.zone.now
 => Wed, 02 Nov 2011 21:12:58 NZDT +13:00 

Консоль Rails:

> Audio.find(661256).broadcast_at
 => Thu, 02 Nov 2006 21:06:00 NZDT +13:00 

А в базе данных:

mysql> select broadcast_at from audio where audio.id = 661256;
+---------------------+
| broadcast_at        |
+---------------------+
| 2006-11-02 08:06:00 |
+---------------------+

Время в БД на 13 часов больше, чем в приложении Rails. Если бы я изменил свой часовой пояс на ваш (IST), времена в Rails были бы скорректированы, чтобы соответствовать, но времена DB остались прежними.

Поскольку возвращаемое время и время в вашем коде находятся в одной зоне, это просто сравнение объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...