Как изменить формат даты с мм / дд / гггг на дд / мм / гггг Ruby on Rails - PullRequest
0 голосов
/ 06 июля 2018

Моя дата:

01/14/2018

Я хочу изменить это как:

14-01-2018 или 2018-01-14

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Это проблема манипуляции с гайкой и болтами. Можно преобразовать строки в объекты даты, а затем преобразовать эти объекты обратно в строки с заданным форматом, но проще использовать строковые методы, как я сделал ниже.

Нам дана строка с датой

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"
0 голосов
/ 06 июля 2018
'01/14/18'.split('/').rotate(-1).reverse.join('-')
0 голосов
/ 06 июля 2018

Два шага:

  • Вам необходимо преобразовать вашу строку в Date объект. Для этого используйте Date#strptime.
  • Вы можете использовать Date#strftime для преобразования объекта Date в предпочтительный формат.

См. Реализацию ниже:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...