Rails の TimeWithZone を JavaScript で読み込めるフォーマットで出力する

at 2016-01-18 06:18 (UTC)

JavaScript で new Date(text)Date.parse(text) した時に読み込める形で TimeWithZone の値を出力したい。
そのまま to_s すると 2015-01-18 12:34:56 +0900 となるが、これでは Chrome でしか読み込めない。
2015/01/18 12:34:56 +0900 という形式ならば Chrome, IE, Firefox で読み込むことができた。

もしくは、せっかく to_json メソッドがあるんだからこれを利用すると安心。しかし余計なダブルクォートは取り除く必要がある。
あと、人が見た時は先述のやり方のほうがぱっと見で理解しやすいと思う

module TimeWithZoneHelper
  def format_for_js1(time_with_zone)
    time_with_zone.to_s.gsub(/-/, '/')
  end

  def format_for_js2(time_with_zone)
    time_with_zone.to_json.gsub(/\"/, '')
  end
end

# to_s(:js) にするなら config/initializers/time_formats.rb にて
Time::DATE_FORMATS[:js] = '%Y/%m/%d %H:%M:%S %z'

to_json 経由だとミリ秒まで含まれているから完全に等価ではないけど、そこらへんは要件しだいということで まあ、色々やり方はあるので好きなやり方を使えばいいと思う。