将字符串转换为日期Ruby on Rails



我正在尝试将字符串日期转换为可以存储在数据库中的日期。这些是我的尝试:

params[:event][:start_date] = '03-21-2016'
DateTime.strptime(params[:event][:start_date], '%Y-%m-%dT%H:%M:%S%z')

DateTime.strptime(params[:event][:start_date], '%m-%d-%Y')

然而,我一直收到一个无效的日期错误。我不确定我做错了什么。

一种方法是:

date_string = '03-21-2016'
month, day, year = date_string.split('-').map(&:to_i)
DateTime.new(year, month, day)

您需要了解格式字符串('%Y-%m-%dT%H:%M:%S%z')中的每个片段(例如%Y)的含义:读取此。

http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

一旦您知道了这一点,您就可以根据您所拥有或期望获得的日期字符串来定制格式字符串:在本例中,为"%m-%d-%Y"

调试时,创建一个新的、基本的、简单的代码版本并进行测试。
require 'date'
params = '03-21-2016'
DateTime.strptime(params, '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)>

请注意格式的顺序:'%m-%d-%Y', which works. That's the problem with your first attempt, where you tried to use%Y-%m-%d . There is NO month 21 or day 2016`。

你的第二次尝试是有效的,但你的问题使它看起来不起作用。你需要更加小心你的测试:

params = {event:{start_date:'03-21-2016'}}
DateTime.strptime(params[:event][:start_date], '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)>

最新更新