【问题标题】:Can using Chronic impair your sense of time?使用 Chronic 会损害您的时间感吗?
【发布时间】:2010-05-12 18:47:55
【问题描述】:

哈哈..

我正在使用 Chronic 来解析用户在日历中添加的时间。在代码工作并实现正确时间的地方,最终结果是,如果用户添加时间,则它没有日期,并且因为它没有日期,所以它不会显示在结果中。有什么想法吗?

def set_dates
  unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_date)
      self.date = nil
      self.time = Chronic.parse(self.natural_date)
    else
      self.date = Chronic.parse(self.natural_date).to_date
      self.time = nil
    end
  end

  unless self.natural_end_date.blank? || Chronic.parse(self.natural_end_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_end_date)
      self.end_date = nil
      self.end_time = Chronic.parse(self.natural_end_date)
    else
      self.end_date = Chronic.parse(self.natural_end_date).to_date
      self.end_time = nil
    end
  end
end

编辑:

这里是time_provided?方法:

def time_provided?(natural_date_string)
  date_span = Chronic.parse(natural_date_string, :guess => false)
  (date_span.last - date_span.first).to_i == 1
end

【问题讨论】:

  • 我必须承认,当我读到这个标题时,它让我笑了。
  • 哈!我也是,我还以为是巨魔
  • +1 起初我是 wtf。然后我笑了。然后我哭了。然后我就兴奋起来了。
  • 当这一切都说完了,这可能是关于 SO 提出的最好的问题。
  • @Alan 我正要回答这个问题,但后来我兴奋了..

标签: ruby-on-rails chronic


【解决方案1】:

首先,我不太确定您在问什么,因为看起来代码故意按照您的描述进行操作...如果提供了时间,则会将日期字段分配给 nil。而且我不认为慢性病是罪魁祸首,因为这就是您的代码的工作方式。

不知道你的设计(为什么有单独的日期和时间字段)、字段的类型等,我建议从这样的小杂烩开始:

if time_provided?(self.natural_date)
  self.time = Chronic.parse(self.natural_date)
  self.date = self.time.to_date

或:

self.end_date = Chronic.parse(self.natural_date).to_date
if time_provided?(self.natural_date)
  self.time = Chronic.parse(self.natural_date)
end

或者问题可能出在您提供的代码之外:在负责“因为它没有日期,它不会显示在结果中”行为的部分?也许你应该让条件更灵活?

【讨论】:

  • 很好的假设。是的,我看到代码绝对不应该将其设置为零。所以我所做的就是使这部分至少非零.. self.date = Chronic.parse(self.natural_date) 而且,不完全确定它做了什么,但至少它做到了,所以你不能添加时间了,因为它不会自动建议一个。 :D。真正的问题是,是否可以分别生成时间和日期。因此,如果他们添加日期 + 时间,我将同时获得日期和单独的日期 + 时间。或者,如果他们只添加一个日期,那么我会得到一个日期和一个没有时间的日期+时间:D
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多