Как даты хранятся в postgres через Ecto (используя Timex)?

В моем приложении Phoenix я использую Ecto с Timex хранить мои даты в postgres, Когда я показываю результаты конечному пользователю, я показываю дни в обратном порядке (т. Е. Сегодня вверху списка), а затем сортирую результаты в каждом дне в хронологическом порядке.

Чтобы это работало правильно, мне нужно применить часовой пояс пользователя перед обработкой сортировки. То, что я делал (до сих пор), это получение данных, преобразование дат с использованием Timex а затем запустить сортировку на стороне клиента. Например, я мог бы сделать что-то вроде этого:

tz_user = Timex.Timezone.get( "Australia/Hobart", Timex.now )

captains_log = CaptainsLog.list_logs_for_user( current_user )

days = captains_log
|> Enum.map( fn (log) -> %Log{ log |
  star_date: Timex.Timezone.convert( log.star_date, tz_user ),
  end_transmission: Timex.Timezone.convert( log.end_transmission, tz_user )
} end)
|> Enum.group_by( fn ( log ) -> Timex.to_date(log.end_transmission) end )
|> Enum.sort( fn (e1, e2) ->
  { date1, _ } = e1
  { date2, _ } = e2

  Timex.compare( date1, date2 ) >= 0
end)

Тем не менее, теперь я хотел бы достичь этой серверной части. Если я сделаю что-то вроде следующего:

select star_date at time zone 'AEST' from captains_log;

Дата не корректируется для моего часового пояса (как я и предполагал). Например, "8:48 утра" был сохранен в базе данных как "9:48 вечера" и отображается как "11:48 утра" в приведенном выше предложении выбора. AEDT не намного лучше, результат "10:48 утра".

Вот что star_date а также end_transmission выглядит как на схеме:

field :star_date, Timex.Ecto.DateTime
field :end_transmission, Timex.Ecto.DateTime

Когда записи добавляются в базу данных, star_date устанавливается до последнего end_transmission, end_transmission обычно устанавливается на Timex.now,

Так как даты / время хранятся в postgres от Ecto? Могу ли я написать запрос на стороне сервера, который подстраивается под нужный часовой пояс? Часовой пояс для каждого пользователя может быть различным, что я могу передать до postgres чтобы я мог сделать запрос для разных часовых поясов?

0 ответов

Другие вопросы по тегам