Я только что нашел ошибку в рельсах Формат даты? - PullRequest
1 голос
/ 07 июня 2011

Пытаясь разобрать дату, я часами ломал голову:

Date.today.to_s
=> "06/07/2011" 

Date.today
=> Tue, 07 Jun 2011 

Date.parse Date.today.to_s
 => Wed, 06 Jul 2011 

Date::DATE_FORMATS[:default]
 => "%m/%d/%Y" 

Формат по умолчанию для to_s отличается от формата по умолчанию для анализа? Зачем им это делать?

Использование Rails 3.0.5 с Ruby 1.9.2-p180

UPDATE Итак, благодаря вашим ответам я понимаю, что DATE_FORMATS - это рельсы, а Date.format использует библиотеку ruby ​​(верно?). Есть ли способ для анализа дат / времени с DATE_FORMAT по умолчанию без использования strptime?

Ответы [ 3 ]

5 голосов
/ 07 июня 2011

Обычно Date.today.to_s возвращает «2011-06-07», но, поскольку вы устанавливаете формат даты по умолчанию, вместо него используется «06/07/2011».

Date.parse легко распознает формат ГГГГ-ММ-ДД, но когда он видит 06/07/2011, он думает, что это действительно ДД / ММ / ГГГГ (не ММ / ДД / ГГГГ, как вы ожидаете - оставайтесь в Имейте в виду, что Date.parse ничего не знает о заданном вами формате даты по умолчанию в Rails. Формат даты по умолчанию предназначен только для вывода Rails Date.to_s).

Вы можете принудительно проанализировать дату ММ / ДД / ГГГГ, например:

Date.strptime(Date.today.to_s, "%m/%d/%Y")
# => Tue, 07 Jun 2011
0 голосов
/ 05 октября 2013

Gem Chronic ( ссылка ) решает практически все проблемы с анализом дат (и да, они могут быть довольно раздражающими). ​​

Chronic.parse("06/07/2011")
#=> 2011-06-07 12:00:00 +0000
0 голосов
/ 07 июня 2011

Я думаю, что метод to_s использует опцию locale , чтобы определить, как записать дату.

Я не понимаю, как это проблема, хотя. Date.parse использует эвристику для разбора даты, поэтому иногда она ошибается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...