【问题标题】:Rails 3 get days between two MySQL datesRails 3 获取两个 MySQL 日期之间的天数
【发布时间】:2013-05-18 22:28:55
【问题描述】:

我希望能够计算出两个日期之间的天数。一个日期是当前日期,另一个来自事件数据库。

到目前为止,我已经在我的模型中尝试过这个:

    this_date = DateTime.parse(self.date.to_s)
    the_date = Time.now
    between = (this_date.to_i - the_date.to_i)

这是另一个问题的建议(嗯,有点)。

数据库中的日期格式是 'YYYY/mm/dd',而 Time.now 中的日期有很大不同,这是我无法计算出来的。

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 使用Date.today 而不是Time.now

标签: mysql ruby-on-rails date datetime date-format


【解决方案1】:

您的模型中self.date 的 db 列是什么数据类型?我注意到您将其转换为字符串,那么它最初是什么?如果它是日期时间类型,那么您可以跳过DateTime.parse,直接比较两个日期以获得以秒为单位的差异:

difference = self.date - Time.now

然后,有趣的部分是将差异转换为可用值。 This question 对此有很好的回答。

编辑:对于日期列,您可以这样做:

difference = (self.date - Date.today).to_i

这会让你一整天都与众不同。

【讨论】:

  • 如果列是正确的日期时间类型,Rails 将为您将数据转换为日期对象,您无需进行任何转换。
  • @StefanDunn - 还添加了 Date 列的示例。
  • 谢谢,这正是我所需要的。与@Strik3r 相同的解决方案
  • @StefanDunn 不完全是,您真的不需要将日期列解析为字符串,然后再解析为日期!而且您不需要将其存储在额外的变量中。
【解决方案2】:
this_date = Date.parse self.date
remaing_days = (Date.today - this_date)

【讨论】:

  • 无需将日期列解析为字符串然后返回日期,也无需将其存储在变量中——这是不必要的内存开销。
【解决方案3】:

从表中选择 (unix_timestamp(first_date)-unix_timestamp(second_date))/84600

84600 是一天中的秒数 unix_timestamp 是自 1970-01-01 以来以秒为单位的日期

所以你不需要 Ruby :-)

【讨论】:

    【解决方案4】:

    即使已回答,但我发布了我对这个问题的解决方案,这帮助我解决了我的问题。我用过:

    Time.zone.now  > e.start && Time.zone.now  < e.end +  1.day 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多