为什么这适用于控制台购买而不适用于我的应用程序?

Why does this work in console buy not in my app?

我试图以一千种不同的方式解决这个问题,查看了数十篇 Whosebug 帖子以及处理 DateTime、bootstrap datetimepicker、格式化、strptime、strftime 等等的外部教程,但没有解决.我现在有一个基本问题可能会帮助我前进。

为什么这在我的控制台中有效:

 DateTime.strptime("09-29-2016 03:29 PM", "%m-%d-%Y %I:%M %p")
   => Thu, 29 Sep 2016 15:29:00 +0000 

但这在我的应用程序中失败了:

@image.start_at = DateTime.strptime(params[:start_at].to_s, "%m-%d-%Y %I:%M %p")
=>ArgumentError in ImagesController#create
invalid date

我的 start_at 参数如下:

..."start_at"=>"09-29-2016 03:29 PM"},... 

此外,这在我的应用程序中不起作用:

@image.start_at = DateTime.strptime(@image.start_at.to_s, "%m-%d-%Y %I:%M %p")

这应该可以正常工作:

@image.start_at = Date.strptime(params[:image][:start_at], "%m-%d-%Y %I:%M %p")

解释:

  1. 您不必将其转换为字符串 - params 中的任何内容都是字符串;
  2. 由于 start_at 的类型是 Date,您应该将 Date 对象传递给它,而不是 DateTime 对象。

如果您的start_at日期时间类型(不是日期,正如您在评论中所说),

@image.start_at = DateTime.strptime(params[:image][:start_at], "%m-%d-%Y %I:%M %p")

会起作用。