Даты синтаксического анализа могут встречаться с некоторыми ошибками, особенно если они представлены в формате ММ / ДД / ГГГГ или ДД / ММ / ГГГГ, например, короткие даты, используемые в США или Европе.
Date#parse
пытается выяснить, какой из них использовать, но в течение года существует много дней в месяце, когда неоднозначность между форматами может вызвать проблемы с синтаксическим анализом.
Я бы порекомендовал выяснить, что такое LOCALE для пользователя, тогда, исходя из этого, вы узнаете, как интеллектуально анализировать, используя Date.strptime
. Лучший способ узнать, где находится пользователь, - это спросить его во время регистрации, а затем указать параметр в его предпочтениях, чтобы изменить его. Предполагая, что вы можете откопать его с помощью некоторой умной эвристики и не беспокоить пользователя этой информацией, он подвержен ошибкам, поэтому просто спросите.
Это тест с использованием Date.parse
. Я в США :
>> Date.parse('01/31/2001')
ArgumentError: invalid date
>> Date.parse('31/01/2001') #=> #<Date: 2001-01-31 (4903881/2,0,2299161)>
Первым был правильный формат для США: мм / дд / гггг, но Дате это не понравилось. Второе было правильным для Европы, но если ваши клиенты в основном базируются в США, вы получите много плохо проанализированных дат.
Ruby's Date.strptime
используется как:
>> Date.strptime('12/31/2001', '%m/%d/%Y') #=> #<Date: 2001-12-31 (4904549/2,0,2299161)>