Railsアプリで次のコードを実行する必要があります:
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date).utc.to_date.strftime("%_m/%d")[1..-1]
ゲームはどこにありますか@games.each do |game|
しかし、これは機能しません。エラーが発生します、TypeError: no implicit conversion of ActiveSupport::TimeWithZone into String
。
ただし、実行できます。
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse("2014-04-11 12am").utc.to_date.strftime("%_m/%d")[1..-1]
「4/11」を返す
ハードコードされた文字列の代わりに `game.date 'で上記のコードを使用するにはどうすればよいですか?
[〜#〜]編集[〜#〜]
gameオブジェクトは次のようになります(db/seeds.rbから):
Game.create(id: 9, date: "2014-04-11 12am", time: "705PM", opponent: "Jacksonville", away: false, event: "friday night fireworks")
編集2
Railsコンソールでgame.dateを実行すると、次のように返されます。
Fri, 11 Apr 2014 00:00:00 UTC +00:00
だからそれは文字列ではないようです。
実行しようとしていることを機能させるには、日付をto_s
を使用して文字列に変換する必要があります。
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.to_s).utc.to_date.strftime("%_m/%d")[1..-1]
ただし、これが本当にやりたいことであるかどうかを検討する必要があります。現在のところ、このコードは日付を取得して文字列に変換し、文字列を解析して日付に戻し、もう一度文字列に変換しています。このようなことでうまくいかなかったのですか?
game.date.strftime(%_m/%d")[1..-1]
以下の文字列を使用できます。
ドキュメントを参照してください http://rubyinrails.com/2013/09/strftime-format-time-in-Ruby/
game.date.strftime("%Y-%m-%d %I:%M%P")
#output=> "2014-04-11 12am"
したがって、ループでは次のものを使用できます。
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.strftime("%Y-%m-%d %I:%M%P")).utc.to_date.strftime("%_m/%d")[1..-1]
ActiveSupport::TimeZone.parse
には文字列が必要であり、以下のDate
オブジェクトの例ではありません。
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(Date.current.to_s).utc.to_date.strftime("%_m/%d")[1..-1]
#=> "4/11"
だから変更:
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date).utc.to_date.strftime("%_m/%d")[1..-1]
に:
ActiveSupport::TimeZone["Central Time (US & Canada)"].parse(game.date.to_s).utc.to_date.strftime("%_m/%d")[1..-1]