如何将日期格式从mm / dd / yyyy更改为dd / mm / yyyy Ruby on Rails

时间:2018-07-06 05:42:34

标签: ruby date

我的约会日期是:

  

01/14/2018

我想要更改它,例如:

  

14-01-2018或2018-01-14

3 个答案:

答案 0 :(得分:3)

两个步骤:

  • 您需要将字符串转换为Date对象。为此,请使用Date#strptime
  • 您可以使用Date#strftimeDate对象转换为首选格式。

请参阅以下实现:

str = '01/14/2018'

date = Date.strptime(str, '%m/%d/%Y')
 => #<Date: 2018-01-14 ((2458133j,0s,0n),+0s,2299161j)>

date.strftime('%d-%m-%Y')
 => "14-01-2018"

date.strftime('%Y-%m-%d')
 => "2018-01-14"

答案 1 :(得分:2)

这是一个基本的字符串操作问题。可以将字符串转换为日期对象,然后将这些对象转换为给定格式的字符串,但是简单地使用字符串方法似乎更简单,就像我下面所做的那样。

我们获得了日期字符串

str = "01/14/2018"

并且将使用

str_fmt = "%s-%s-%s"

作为格式字符串。

最简单的方法是使用 slice 方法String#[]提取字符串中感兴趣的部分。

str_fmt % [str[3,2], str[0,2], str[6,4]]
  #=> "14-01-2018"
str_fmt % [str[6,4], str[0,2], str[3,2]]
  #=> "2018-01-14"

或者,可以对正则表达式使用月份,日和年的捕获组。

r = /
    \A       # match the beginning of the string
    (\d{2})  # match two digits in capture group 1
    \/       # match a forward slash
    (\d{2})  # match two digits in capture group 2
    \/       # match a forward slash
    (\d{4})  # match two digits in capture group 3
    \z       # match the end of the string
    /x       # free-spacing regex definition mode

str =~ r
str_fmt % [$2, $1, $3]
  #=> "14-01-2018"
str_fmt % [$3, $1, $2]
  #=> "2018-01-14"

如果要使用命名捕获组,我们将编写以下内容。

m = str.match /\A(?<mon>\d{2})\/(?<day>\d{2})\/(?<yr>\d{4})\z/
str_fmt % [m[:day], m[:mon], m[:yr]]
  #=> "14-01-2018"
str_fmt % [m[:yr], m[:mon], m[:day]]
  #=> "2018-01-14"

答案 2 :(得分:0)

'01/14/18'.split('/').rotate(-1).reverse.join('-')