1

我们有一个应用程序,用户可以在其中设置他/她的首选日期/时间格式。用户应datetime在整个应用程序中以配置的格式输入。现在的问题是,对于少数格式,datetimecreate/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. 所以步骤想

  1. datetimeparams地图读取
  2. 用用户喜欢的日期时间格式解析它
  3. 格式化datetime为使用的默认格式ActiveRecord
  4. 用重新格式化的日期时间替换当前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

有人可以验证它是否是正确的方法吗?如果有人提出更好的方法来实现这一点,我将不胜感激。

谢谢,阿米特帕特尔

4

1 回答 1

0

我会采用我提到的方法。如果有人有更好的方法,请继续分享。

谢谢,阿米特帕特尔

于 2012-04-19T07:37:42.250 回答