Как преобразовать время в дату в местном часовом поясе во время запроса - PullRequest
0 голосов
/ 28 декабря 2011

У нас очень простая модель платежей с полем даты и времени по умолчанию «create_at», который мы должны искать в диапазоне дат, поэтому я сделал это:

>> Payment.all(:conditions => 
              ["Date(payments.created_at) >= ? and 
                Date(payments.created_at) <= ?", start_date, end_date])

У меня проблема с датойфункция.Например,

>> Payment.find(2577).created_at
=> Thu, 15 Dec 2011 18:15:00 UTC +00:00

Но

>> Payment.find(2577).created_at.localtime
=> Fri Dec 16 01:15:00 +0700 2011

Поэтому, когда мы ищем платежи 16 декабря, мы не получаем никаких результатов, так как Date (payment.created_at) конвертирует время UTC в датукоторый преобразуется в 15 декабря.

Можно ли изменить Date (payment.created_at), чтобы вместо этого он искал даты в местном часовом поясе?Мы используем Rails 2.3.5 и postgresql.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Наконец-то получил его на работу! Не очень красиво (и я надеюсь, что есть более чистое решение), но это сработало:

>> Payment.all(:conditions => 
              ["Date((payments.created_at at time zone 'UTC') 
                at time zone :timezone) >= :start_date and 
                Date((payments.created_at at time zone 'UTC') 
                at time zone :timezone) <= :end_date",
               :start_date => start_date, :end_date => end_date, 
               :timezone => 'Asia/Katmandu'])

Хотя на самом деле не нравится это делать:

Date((payments.created_at at time zone 'UTC') at time zone 'Asia/Katmandu')

Почему postgresql не позволяет вам сделать это?

Date(payments.created_at at 'Asia/Katmandu')
0 голосов
/ 28 декабря 2011

Можете ли вы просто запустить .localtime для ваших start_date и end_date?Примерно так:

Payment.all(:conditions => 
  ["Date(payments.created_at) >= ? and 
    Date(payments.created_at) <= ?", start_date.localtime, end_date.localtime])

Вы также можете установить местный часовой пояс в файле config / environment.rb:

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