我们有一个应用程序,用户可以在其中设置他/她的首选日期/时间格式。用户应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
有人已经在这里和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
有人可以验证它是否是正确的方法吗?如果有人提出更好的方法来实现这一点,我将不胜感激。
谢谢,阿米特帕特尔