【问题标题】:Rails DateTime helper logicRails DateTime 辅助逻辑
【发布时间】:2016-08-11 15:29:09
【问题描述】:

快速提问。我正在使用 distance_of_time_in_words 助手来检查创建对象的天数。这工作正常,但我不希望它必须在 24 小时前计算一天,而是希望它在“00:00”时计算“1”天

例如 distance_of_time_in_words("2016-08-11 11:00", "2016-08-12 00:00") 应该是 1 天,但它是 13 小时

我希望它一旦通过“00:00”就应该算作 1 天?

【问题讨论】:

  • 请记住,您提出的逻辑很大程度上取决于观察者所在的时区。如果您从服务器提供此值,那么您的访问者很可能不会在同一时区。 (考虑到......满足这个任意要求所需的自定义逻辑和努力真的值得吗?)
  • 非常真实会记住这一点......但现在只使用我的时区。感谢您指出这一点

标签: mysql ruby-on-rails ruby datetime view-helpers


【解决方案1】:

你可以使用

time_ago_in_words(date_item_was_created.at_midnight)

time_ago_in_words 允许您放弃添加“现在”时间*,并将创建日期移回午夜,您将跨越一天标记 在下一个午夜。根据API doc 的说法,它应该为您提供一天内的任何时间,这听起来像是您所追求的。

*如果您不与当前时间进行比较,您可以继续使用 distance_of_time_in_words。

【讨论】:

  • 哦,聪明聪明,我真正需要的只是 at_midnight
【解决方案2】:

我猜这就是你的意思。

def distance_of_time_in_words(time1,time2)

  d1 = Time.parse(time1.to_s).to_date.strftime("%d").to_i
  d2 = Time.parse(time2.to_s).to_date.strftime("%d").to_i
  seconds = Time.parse(time2.to_s)- Time.parse(time1.to_s)
  hours = seconds/3600

  if d2-d1 >= 1
    return "#{(d2-d1).to_s} days"
  else
    return "#{hours.to_s} hours"
  end

end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2016-07-22
    • 1970-01-01
    相关资源
    最近更新 更多