2013-03-31 28 views
5

Dostaję błądSzyny metoda niezdefiniowany `strftime 'za "06/03/2013": String

niezdefiniowana metoda` strftime' za "06/03/2013": String

podczas próby wyświetlaj zwykle datę (czerwiec, 3 czerwca 2013 r. lub coś podobnego) z ciągu 2013-03-06 za pomocą strftime.

Linia że robi to w moim index.html.erb i wygląda to

<td><%= task.duedate.strftime("%B %e, %Y") %></td>

ja ucze Rails, więc jestem pewien, że to jest po prostu głupi błąd początkujących, każda pomoc będzie docenione. Dziękujemy

+1

Przykład: d = Data.today # 2008-08-12 d.strftime ("% b% d,% Y") # zostanie wydrukowane 12 sierpnia 2008 – Hackerman

+0

Czy istnieje szczególny powód, dla którego twoje pole typów Date lub DateTime? – depa

+0

Właśnie napotkałem ten problem po dodaniu i wypełnieniu kolumny daty w migracji. Rozwiązanie zostało po prostu ponownie uruchomione (domyślam się, że Rails nie wiedział, że atrybut był datą do tego czasu?). – thewillcole

Odpowiedz

27

Wygląda na to, że twój duedate jest łańcuchem, kiedy strftime jest metodą klasy Time/Date. Możesz spróbować:

Date.parse(task.duedate).strftime("%B %e, %Y") 
+0

Dziękuję bardzo, to działa idealnie. – Colin

+0

Dzięki temu zadziałało również dla mnie (wiadomość z przyszłości) =) –

0

Przechowujesz datetime jako ciąg, a nie jako faktycznie datetime. Trzeba będzie utworzyć nową migrację jak na poniższym

change_table :tasks do |t| 
    t.change :duedate, :datetime 
end 

Ten sposób podczas korzystania DueDate będzie zostały już analizowany jako obiekt datetime, zamiast konieczności konwertowania go za każdym razem.

0

Możesz również użyć strptime. Jest to praca dla mnie :)

DateTime.strptime(task.duedate ,"%B %e, %Y") 
0

To rozwiązało problem dla mnie:

Date.created_at.try(:strftime, ("%B %e, %Y")) 

nadzieję, że to pomaga!