我们有一个应用程序,用户可以设置他/她的首选日期/时间格式。用户应在整个应用程序中以配置的格式输入datetime
。现在问题是在datetime
create/update
时,ActiveRecord
被错误地解析的格式很少。
例如,用户在hh:mm dd/MM/yyyy
中设置了日期/时间格式。现在,如果用户输入17:00 04/05/2012
,则会将其解析为5 PM 5 Apr, 2012
,其位置应为5 PM 4 May, 2012
1.8.7 :004 > a = Article.create!(:name => 'a1', :published_at => '17:00 04/05/2012')
=> #<Article id: 2, name: "a1", published_at: "2012-04-05 17:00:00", created_at: "2012-04-16 13:54:36", updated_at: "2012-04-16 13:54:36">
据我所知,ruby / rails有一组预定义的格式,日期/时间字符串将根据这些格式进行评估,如果按顺序匹配任何格式,它会解析给定字符串的格式。
另一个例子
1.8.7 :006 > a = Article.create!(:name => 'a1', :published_at => '17:00 15/12/2012')
=> #<Article id: 4, name: "a1", published_at: nil, created_at: "2012-04-16 13:55:43", updated_at: "2012-04-16 13:55:43">
此处用户输入15 December, 2012
,其已解析为nil
有人已经问过类似的问题here和ruby-forum,但解决方案不适用于我的情况,因为我无法在整个应用程序中配置单个日期时间格式,因为每个用户都有自己的首选日期时间格式。
现在使用多种datetime
格式,我计划在将params
传递给ActiveRecord
之前对其进行操作。所以步骤想要
datetime
地图params
datetime
格式化为ActiveRecord
datetime
中的当前params
醇>
以下是控制器的片段
class ArticlesController < ApplicationController
before_filter :format_date_time, :only => [:create, :update]
...
...
private
def format_date_time
datetime = params[:datetime]
params[:datetime] = DateTime.strptime(datetime, pref_date_time_format).strftime('%c')
end
end
有人可以验证它是否是正确的方法?如果有人提出更好的方法来实现这一点,我会感激不尽。
谢谢, 阿米特帕特尔
答案 0 :(得分:0)
我会采用我提到的方法。如果有人有更好的方法请继续分享。
谢谢,Amit Patel