我使用active_model_serializers和ember.js。 我的一个模型都有一个日期属性。 在轨日期属性连载中的“YYYY-MM-DD”的格式。
问题; 当烬数据解串使用JavaScript日期构造它假定一个“不正确”时区的日期。
*不正确的是不是最好的词,但它是不正确,因为我希望它默认为当前时区。 DS.Model日期属性解析日期(YYYY-MM-DD)不正确地
我想到的是active_model_serializer应采取日期属性并将其转换为ISO8601格式。
Object.date.to_time_in_current_zone.iso8601
有没有办法告诉active_model_serializers如何序列所有日期的对象? 或者我应该被固定在JavaScript中的时区问题?
这是我目前的解决方案,但我真的觉得应该可以定义如何Date对象获得全球序列化。
class InvoiceSerializer < ActiveModel::Serializer
attributes :id, :customer_id, :balance
def attributes
hash = super
hash['date'] = object.date.to_time_in_current_zone.iso8601 if object.date
hash
end
end
UPDATE
我首选的方案现在是猴子修补ActiveSupport::TimeWithZone.as_json
方法。
#config/initializers/time.rb
module ActiveSupport
class TimeWithZone
def as_json(options = nil)
time.iso8601
end
end
end
class InvoiceSerializer < ActiveModel::Serializer
attributes :id, :customer_id, :balance, :date
end
在的ActiveSupport的最后一个版本(4.2)日期是在ISO8601格式。 你不需要再猴补丁。 您可配置输出格式
#config/initializers/time.rb
ActiveSupport::JSON::Encoding.use_standard_json_time_format = true # iso8601 format
ActiveSupport::JSON::Encoding.time_precision = 3 # for millisecondes
看到该文档