Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 凤凰城-**(ArgumentError)无法识别的时间#<;日期时间(2021-12-31T23:59:00Z)>;_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 凤凰城-**(ArgumentError)无法识别的时间#<;日期时间(2021-12-31T23:59:00Z)>;

Elixir 凤凰城-**(ArgumentError)无法识别的时间#<;日期时间(2021-12-31T23:59:00Z)>;,elixir,phoenix-framework,Elixir,Phoenix Framework,我在我的项目中使用Timex.DateTime处理datetimes&到目前为止,它完成了这项工作 但是,我尝试为Phoenix.HTML.Form创建一个自定义生成器,用于编辑datetimepublish\u date以下内容: %> 时间::: 日期:// 我从输出中了解到,我使用不同的类型,但我不知道如何转换它们,我仍在学习Phoenix,因此,如果您有更好的方法解决此问题,也会很有用 堆栈跟踪: Request: HEAD /news/12/edit ** (

我在我的项目中使用Timex.DateTime处理datetimes&到目前为止,它完成了这项工作

但是,我尝试为Phoenix.HTML.Form创建一个自定义生成器,用于编辑datetime
publish\u date
以下内容:



%> 时间:::
日期://

我从输出中了解到,我使用不同的类型,但我不知道如何转换它们,我仍在学习Phoenix,因此,如果您有更好的方法解决此问题,也会很有用

堆栈跟踪:

      Request: HEAD /news/12/edit
  ** (exit) an exception was raised:
      ** (ArgumentError) unrecognized time #<DateTime(2021-12-31T23:59:00Z)>
          (phoenix_html) lib/phoenix_html/form.ex:966: Phoenix.HTML.Form.time_value/1
          (phoenix_html) lib/phoenix_html/form.ex:895: Phoenix.HTML.Form.datetime_select/3
          (estrada) web/templates/news_article/form.html.eex:41: anonymous fn/2 in Estrada.NewsArticleView.form.html/1
          (phoenix_html) lib/phoenix_html/form.ex:235: Phoenix.HTML.Form.form_for/4
          (estrada) web/templates/news_article/form.html.eex:1: Estrada.NewsArticleView."form.html"/1
          (estrada) web/templates/news_article/edit.html.eex:3: Estrada.NewsArticleView."edit.html"/1
          (estrada) web/templates/layout/app.html.eex:48: Estrada.LayoutView."app.html"/1
          (phoenix) lib/phoenix/view.ex:344: Phoenix.View.render_to_iodata/3
          (phoenix) lib/phoenix/controller.ex:633: Phoenix.Controller.do_render/4
          (estrada) web/controllers/news_article_controller.ex:1: Estrada.NewsArticleController.action/2
          (estrada) web/controllers/news_article_controller.ex:1: Estrada.NewsArticleController.phoenix_controller_pipeline/2
          (estrada) lib/phoenix/router.ex:261: Estrada.Router.dispatch/2
          (estrada) web/router.ex:1: Estrada.Router.do_call/2
          (estrada) lib/estrada/endpoint.ex:1: Estrada.Endpoint.phoenix_pipeline/1
          (estrada) lib/plug/debugger.ex:93: Estrada.Endpoint."call (overridable 3)"/2
          (estrada) lib/phoenix/endpoint/render_errors.ex:34: Estrada.Endpoint.call/2
          (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
          (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
请求:HEAD/news/12/edit
**(退出)引发了一个异常:
**(ArgumentError)无法识别的时间#
(phoenix_html)lib/phoenix_html/form.ex:966:phoenix.html.form.time_value/1
(phoenix_html)lib/phoenix_html/form.ex:895:phoenix.html.form.datetime_select/3
(estrada)web/templates/news_article/form.html.eex:41:enonymous fn/2在estrada.newsactionview.form.html/1中
(phoenix_html)lib/phoenix_html/form.ex:235:phoenix.html.form.form_for/4
(estrada)web/templates/news_article/form.html.eex:1:estrada.newsactionview.“form.html”/1
(estrada)web/templates/news_article/edit.html.eex:3:estrada.newsactionview.“edit.html”/1
(estrada)web/templates/layout/app.html.eex:48:estrada.LayoutView.“app.html”/1
(phoenix)lib/phoenix/view.ex:344:phoenix.view.render_to_iodata/3
(phoenix)lib/phoenix/controller.ex:633:phoenix.controller.do_render/4
(estrada)web/controllers/news\u article\u controller.ex:1:estrada.newsactioncontroller.action/2
(estrada)web/controllers/news\u article\u controller.ex:1:estrada.newsactioncontroller.phoenix\u controller\u pipeline/2
(estrada)lib/phoenix/router.ex:261:estrada.router.dispatch/2
(estrada)web/router.ex:1:estrada.router.do_call/2
(estrada)lib/estrada/endpoint.ex:1:estrada.endpoint.phoenix_管道/1
(estrada)lib/plug/debugger.ex:93:estrada.Endpoint.“调用(可重写3)”/2
(estrada)lib/phoenix/endpoint/render_errors.ex:34:estrada.endpoint.call/2
(plug)lib/plug/adapters/cowboy/handler.ex:15:plug.adapters.cowboy.handler.upgrade/4
(cowboy)src/cowboy_protocol.erl:442::cowboy_protocol.execute/4

编辑:当我用它创建一篇新文章时,这个表单工作得很好,只有当我用它编辑一篇文章时它才会崩溃,也就是说,当表单向服务器提交数据时它才会工作,只有当我填充datetime字段时才会发生这种情况。

问题是
datetime\u select
只支持,和
Timex.DateTime
与它们中的任何一个都不匹配

您可以手动将
Timex.DateTime
转换为支持的格式并传递:

替换

<%= datetime_select f, :publish_date, class: "form-control", builder: fn b -> %>
%>

%>
(记住用实际型号替换
型号
。)


当Elixir 1.3发布后,phoenix_html和timex的未来版本希望不需要此解决方法。

看看时间(2021年12月31日晚上11:59),我猜可能您没有正确地从数据库中获取字段。不,我正在获取字段,输入数据是正确的。非常感谢,只是为了完成填充模型的部分,我不知道怎么做,应该是
f.data.publish\u date
…&另外,如果其他人试图实现此功能,则必须对字段
f.data.publish\u date
执行空检查,因为如果将表单与
new
一起使用,则模型的对象将为空。
<%= datetime_select f, :publish_date, class: "form-control", builder: fn b -> %>
<%= datetime_select f, :publish_date, value: Timex.to_erlang_datetime(model.publish_date), class: "form-control", builder: fn b -> %>