如何使用替代日期格式在Ruby on Rails中格式化日期?

时间:2014-08-01 14:31:08

标签: ruby-on-rails ruby

我有一个旧数据库,其中每个用户首​​选的date_format可以具有以下值之一:

dd.mm.yy
dd/mm/yy
mm/dd/yy

我注意到这种格式与一些javascript函数很好地配合(这可能就是他们选择它的原因)。

但是如何使用这些格式在Ruby on Rails中格式化日期?

我想使用date.strftime("dd.mm.yy")之类的内容,但strftime不接受上述三种格式中的任何一种。

如何做到这一点?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

它不接受它,因为dd.mm.yy不是strftime格式。正确的模式是"%d.%m.%y""%d/%m/%y""%m/%d/%y"

Date.today.strftime("%d.%m.%y") #=> "01.08.14"
Date.today.strftime("%d/%m/%y") #=> "01/08/14"
Date.today.strftime("%m/%d/%y") #=> "08/01/14"

所以你需要简单地转换你的模式,例如“dd.mm.yy”:

"dd.mm.yy".gsub('dd','%d').gsub('mm', '%m').gsub('yy', '%y') #=> "%d.%m.%y"

您可以在strftime中使用它:

Date.today.strftime("dd.mm.yy".gsub('dd','%d').gsub('mm', '%m').gsub('yy', '%y')) #=> "01.08.14"

答案 1 :(得分:2)

如果我问你问题,你只需要修改格式字符串,以便strftime能够识别它。例如,使用gsub

def my_date_format(date, format)
  strftime_format = format.gsub(/([dmy])\1/, 'dd' => '%d', 'mm' => '%m', 'yy' => '%Y')
  date.strftime(strftime_format)
end

require 'date'
my_date_format(Date.today, 'dd.mm.yy')
# => "01.08.2014"

答案 2 :(得分:0)

请参阅http://apidock.com/ruby/DateTime/strftime

您需要使用%d等。