2016-05-05 3 views
0

データベースから日付を取得したい場合は、UNIXのタイムスタンプとして保存してYYYY/MM/DD形式に変換します。DateTime.strptimeに変数を渡すと、TypeErrorが発生します。Fixnumを暗黙的に文字列に変換しません。

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

しかし、私はUnixタイムスタンプが含まれている変数を渡すとき、私はビューでは、エラーメッセージ

を受ける

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

DateTime.strptimesub.start_dateを渡すための正しい方法は何ですか?

+0

どのデータ型が 'sub.start_date'ですか?それは既に 'DateTime'ですか? 'sub.start_date.to_s'を' DateTime.strptime'なしで使用できますか?おそらく、[Date#strftime](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-strftime)メソッドも参照してください。 –

+0

'sub.start_date'は' Integer'値としてデータベースに保存されます。それは '1461801600'のような値を返します –

+1

もちろん、エラーは私たちにそれを教えてくれます。したがって、それを文字列に変換します: 'sub.start_date.to_s' –

答えて

3

これは整数として格納されたUNIXタイムスタンプであると仮定すると、あなたはこれがstrptimeの文字列の必要性にint型を回避

Time.at(your_integer_value).to_datetime 

Time.athttp://api.rubyonrails.org/v4.2/classes/Time.html#method-c-at)を使用することができ、したがって、より高速にする必要があります。

+0

ありがとうございます。このソリューションも機能し、必要なコードは少なくて済みます。 –

関連する問題