Время сравнить в рамках эликсир феникс - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу получить ввод данных от пользователя и сравнить (если оно наступит как минимум через 30 минут), будь то будущее и сохранить его в базе данных.Дата из пользовательского ввода примерно так 2018-09-26 Время из пользовательского ввода примерно так* и я хочу сравнить это.

def schedule_datetime_is_future?(schedule_datetime) do
    # 30 mins future from now on
    future_datetime = DateTime.to_naive(Timex.add(Timex.now, Timex.Duration.from_minutes(30)))
    case Timex.compare(schedule_datetime, future_datetime) do
      1 ->
        # schedule datetime is future
        true
      -1 ->
        # schedule datetime is not future
        false
      _ ->
        false
    end
  end

Но Timex.now возвращается в часовом поясе моего компьютера разработчика (возможно, возвращает utc).Так что сравнивайте не работает должным образом (пользователь вводит дату и время по местному времени.) Как я могу сделать это лучше?Должен ли я изменить дату и время пользователя на время?Как я могу это сделать?

Спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

Во-первых, вы не должны ничего преобразовывать в NaiveDateTime, поскольку наивное время даты вообще не имеет часового пояса (отсюда и название).

Возможно, вам следует использовать DateTime.diff/3:

def build_datetime(date, time) do
  with {:ok, datetime, 0} <- DateTime.from_iso8601("#{date}T#{time}:00Z"),
    do: datetime
end

def schedule_datetime_is_future?(schedule_datetime) do
  DateTime.diff(schedule_datetime, DateTime.utc_now) > 30 * 60
end
...