Ruby on rails 获取Rails ActiveRecord';日期时间';属性作为DateTime对象

Ruby on rails 获取Rails ActiveRecord';日期时间';属性作为DateTime对象,ruby-on-rails,datetime,activerecord,time,Ruby On Rails,Datetime,Activerecord,Time,我的一个模型中有一个属性,它包含一个日期/时间值,并在迁移中使用t.datetime:end\u on声明 当我使用myevent.end\u on获取此值时,我得到一个Time对象。问题是,当我尝试将此属性用作图表中的轴时,它无法正常工作,因为Flotila只将日期识别为Date或DateTime对象 我曾考虑编写一个虚拟属性,将现有的时间值转换为日期时间,但我对此持谨慎态度,因为我听说时间无法处理2040年以后的日期,我不希望冒险创建一个“2040 bug”以供以后担心 有什么方法可以说服A

我的一个模型中有一个属性,它包含一个日期/时间值,并在迁移中使用
t.datetime:end\u on声明

当我使用
myevent.end\u on
获取此值时,我得到一个
Time
对象。问题是,当我尝试将此属性用作图表中的轴时,它无法正常工作,因为Flotila只将日期识别为
Date
DateTime
对象

我曾考虑编写一个虚拟属性,将现有的时间值转换为日期时间,但我对此持谨慎态度,因为我听说时间无法处理2040年以后的日期,我不希望冒险创建一个“2040 bug”以供以后担心


有什么方法可以说服ActiveRecord返回此属性的日期时间对象而不是时间对象吗?

您可以使用
Time::to_date
Time::to_DateTime
非常轻松地转换
Time
对象。有关这方面的更多信息:

因此,您应该如下更改代码:

myevent.ended_on.to_date
# or
myevent.ended_on.to_datetime

始终可以创建一个方法来覆盖该属性,如下所示:

class YourModel

  ....

  def ended_on
    self['ended_on'].to_datetime # if you need date object use to_date instead
  end

  ....
end

如果您使用的是64位机器,那么2038年之后的日期就不会有问题,希望这会有所帮助。至少我可以创建2038年以后的时间实例。谢谢,这似乎可以完成这项工作。我实际使用的代码是
self['ended\u on']和&self['ended\u on']。to_datetime
,因此它不会有任何关于nil值的问题。我仍然有点担心2040,但我想在那之前会有很多新版本的Rails需要升级。