2016-05-05 6 views
0

Ich möchte ein Datum aus meiner Datenbank abrufen, das als Unix-Zeitstempel gespeichert und in das JJJJ/MM/TT-Format konvertiert wird.Das Übergeben einer Variablen an DateTime.strptime führt zu TypeError: keine implizite Konvertierung von Fixnum in String

DateTime.strptime('1462406400','%s') 
=> Thu, 05 May 2016 00:00:00 +0000 

Aber wenn ich eine Variable übergeben, der den Unix-Zeitstempel ich eine Fehlermeldung enthält

In der Ansicht

<div>Your first invoice will be due <%= DateTime.strptime(sub.start_date,'%s') %></div> 
TypeError: no implicit conversion of Fixnum into String 

Was ist der richtige Weg sub.start_date-DateTime.strptime passieren?

+0

Welcher Datentyp ist 'sub.start_date'? Ist es schon eine 'DateTime' oder ähnliches? Können Sie 'sub.start_date.to_s' ohne die' DateTime.strptime' verwenden? Vielleicht möchten Sie sich auch die Methode [Date # strftime] (http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime) ansehen. –

+0

'sub.start_date' wird als 'Integer'-Wert in der Datenbank gespeichert. Es gibt einen Wert wie '1461801600' –

+1

Oh natürlich, der Fehler sagt uns, dass. Also wandle es in einen String um: 'sub.start_date.to_s' –

Antwort

3

Angenommen, dies ein Zeitstempel als Integer gespeichert Unix ist, könnten Sie Time.at (http://api.rubyonrails.org/v4.2/classes/Time.html#method-c-at)

Time.at(your_integer_value).to_datetime 

Dies vermeidet die int String Notwendigkeit strptime, verwenden und daher schneller sein sollte.

+0

Danke, diese Lösung funktioniert auch und es erfordert weniger Code. –

Verwandte Themen