Phoenix.HTML.Form并格式化文本输入的Timex.DateTime

时间:2017-04-19 13:22:00

标签: elixir phoenix-framework

我想将Timex DateTime字段的格式更改为单个文本输入。当我让Phoenix处理格式化时,它看起来像这样:

2017-04-06 23:03:44.513454+10:00 AEST Australia/Hobart

请注意,我正在使用use Timex.Ecto.Timestamps, usec: true - 因此它包含微秒。

这就是我希望它的样子:

2017-04-06 23:03:44 +10:00

有没有办法通过text_input格式控制日期格式?还是有另一种方法可以做到这一点吗?

这是我正在使用的架构:

schema "log" do
  field :start_date, Timex.Ecto.DateTime
  field :end_date, Timex.Ecto.DateTime
  field :comment, :string

  timestamps
end

我的表单看起来像这样:

<%= form_for @changeset, @action, fn f -> %>
  <%= if @changeset.action do %>
    <div class="alert alert-danger">
      <p>Oops, something went wrong! Please check the errors below.</p>
    </div>
  <% end %>

  <div class="form-group">
    <%= label f, :start_date, class: "control-label" %>
    <%= text_input f, :start_date, class: "form-control" %>
    <%= error_tag f, :start_date %>
  </div>

  <div class="form-group">
    <%= label f, :end_date, class: "control-label" %>
    <%= text_input f, :end_date, class: "form-control" %>

    <%= error_tag f, :end_date %>
  </div>

  <div class="form-group">
    <%= label f, :comment, class: "control-label" %>
    <%= textarea f, :comment, class: "form-control" %>
    <%= error_tag f, :comment %>
  </div>

  <div class="form-group">
    <%= submit "Submit", class: "btn btn-primary" %>
  </div>
<% end %>

1 个答案:

答案 0 :(得分:1)

您可以使用Phoenix.HTML.Form.input_value/2获取输入值,并可以通过将value: ...传递给text_input来指定要向用户显示的值。将此与从值中删除微秒相结合,您将获得相同格式的时间,而不会有任何微秒:

text_input f, :start_date, class: "form-control", value: %{input_value(f, :start_date) | microsecond: {0, 0}}