2013-07-10 17 views
23

mam datę (co jest faktycznie analizowany z pliku PDF) i może to być każdy z następującym formacie:Przetwarza datę w szynach

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

Czy istnieje gem lub funkcja dostępna w szynach lub rubinu do Przetworzyć moją randkę? Czy potrzebuję parsować go za pomocą wyrażeń regularnych?

BTW Używam ruby ​​na szynach 3.2.

Odpowiedz

56

Możesz spróbować Date.parse(date_string).

Można również użyć Date#strptime jeśli potrzebujesz konkretnego formatu:

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

na ogólne rozwiązanie:

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

myślę, że nie analizuje formatu amerykański (MM/DD/YYYY). –

+0

Nie mogę używać strptime, ponieważ nie znam formatu mojej daty :( –

+0

Możesz to łatwo wywnioskować, nie? Jeśli nie będzie parsować z 'Date.parse', wtedy podzielone ("/") .last będzie mieć 2 lub 4 znaki, informując, że powinieneś używać% y lub% Y. –

5

znajdę przewlekłe gem bardzo łatwy w obsłudze dla czasu analizowania i to powinno praca dla Ciebie. Próbowałem przykładów, które dałeś.

https://github.com/mojombo/chronic

+0

Wydaje się być dobrym do obsługi złożonych dat, czy istnieje opcja, w której mogę określić, że moje daty będą podawane w formacie MM/DD/RRRR, a nie w formacie DD/MM/RRRR? –

+0

powinno to być domyślne, ale możesz ustawić endianness w taki sposób, jak 'endian_precedence:: little' i będzie on parsował DD/MM/RRRR – beanie