2013-07-10 1 views
23

у меня есть дата (которая на самом деле разобраны из PDF), и это может быть любой из следующих форматов:Разбираем дату в рельсах

MM/DD/YYYY 
MM/DD/YY 
M/D/YY 
October 15, 2007 
Oct 15, 2007 

Есть ли драгоценный камень или функция доступна в рельсах или рубин в проанализировать мою дату? Или мне нужно разобрать его с помощью регулярного выражения?

BTW Я использую рубин на рельсах 3.2.

ответ

56

Вы можете попробовать Date.parse(date_string).

Вы также можете использовать Date#strptime, если вам нужен определенный формат:

> Date.strptime("10/15/2013", "%m/%d/%Y") 
=> Tue, 15 Oct 2013 

Для общего решения:

format_str = "%m/%d/" + (date_str =~ /\d{4}/ ? "%Y" : "%y") 
date = Date.parse(date_str) rescue Date.strptime(date_str, format_str) 
+0

Я думаю, что это не разобрать американский формат (ММ/ДД/ГГГГ). –

+0

Я не могу использовать strptime, так как не знаю формат моей даты :( –

+0

Вы могли бы сделать это достаточно легко, нет? Если он не будет анализировать с помощью 'Date.parse', тогда разделите («/») .last будет либо 2, либо 4 символа, давая вам знать, следует ли использовать% y или% Y. –

5

я считаю хроническую камень очень простой в использовании для времени синтаксического анализа, и он должен работа для вас. Я попробовал примеры, которые вы дали.

https://github.com/mojombo/chronic

+0

Кажется хорошим для обработки сложных дат, есть ли опция, где я могу указать, что мои даты будут в формате MM/DD/YYYY, а не в формате DD/MM/YYYY? –

+0

это должно быть значение по умолчанию, но вы можете установить endianness как этот 'endian_precedence:: little', и он будет анализировать DD/MM/YYYY – beanie

 Смежные вопросы

  • Нет связанных вопросов^_^