2013-09-22 14 views
19

Jestem pewien, że powinno to być proste (prawdopodobnie brakuje czegoś oczywistego), ale ... Mam ciąg bazy danych o długości milisekund, który chcę przekonwertować na datę w formacie US w Railsach. Pomyślałem, że dzwonienie pod numer .to_date będzie moim przyjacielem, ale rzuca dziwny błąd.Konwertuj milisekundy na sformatowaną datę w Railsach

article.date => "1379844601000" 

article.date.to_date 
NoMethodError: undefined method `div' for nil:NilClass 

Czy ktoś może doradzić we właściwy sposób?

Odpowiedz

12

Używaj Date.strptime - ale przed tym, konwertować je do sekundy pierwszy:

sec = ('1379844601000'.to_f/1000).to_s 
Date.strptime(sec, '%s') 
//Sun, 22 Sep 2013 
+0

Działa to świetnie, dzięki - czy jest jakikolwiek sposób, aby wyświetlić go jako MM-DD-YYYY zamiast DAY, DD MMM YYYY? – Nick

+0

use: 'strftime': http://apidock.com/ruby/DateTime/strftime – shem

-1

Time.parse ("1379844601000") daje datę i godzinę

+2

Czy to działa dla Ciebie? To daje mi 'ArgumentError: brak informacji o czasie w" 1379844601000 "'. Date.parse daje 'ArgumentError: invalid date'. – Nick

+0

To działa dobrze dla mnie >> Time.parse ("1379844601000") => Niedziela 22 września 16:32:36 +0530 2013 – vigneshre

+2

Wygląda na to, że jest to problem z wersją rubinową. Wersje 1.9.x Ruby nie mają tej opcji parsowania. Tak więc, możesz użyć metody Time.strptime() lub użyć takich klejnotów jak ten https://github.com/jeremyevans/ruby-american_date – vigneshre

24
Time.strptime(milliseconds.to_s, '%Q') 
// %Q - Number of milliseconds since 1970-01-01 00:00:00 UTC. 
+0

powinno to być zaakceptowaną odpowiedzią – pungoyal

Powiązane problemy