如何避免比较日期时混淆大/小的关系

121 阅读1分钟

当涉及到比较日期时,由于某种原因,我的大脑真的很挣扎。我总是把<>= 混为一谈,最后把它们翻过来。

start_date 大于end_date 吗?或者反过来?我感到困惑,因为我认为日期是指beforeafter ,而不是greater_thanless_than

使用方法

幸运的是,Rails在这里拯救了我,通过为所有与日期相关的比较添加before?after? ,确保我不再犯这种错误:

start_date = Date.new(2019, 3, 31)
end_date = Date.new(2019, 4, 1)

start_date.before? end_date
#=> true
end_date.after? start_date
#=> true

start_date = Date.new(2020, 8, 11)
end_date = Date.new(2018, 8, 11)

start_date.before? end_date
#=> false

我发现自己在Rails模型验证中经常使用这些方法,当我需要确保两个日期形成一个有效范围时:

class Promotion < ApplicationRecord
  validate :valid_eligiblity_range?

  def valid_eligiblity_range?
    return unless expiration_date? && start_date?

    if !expiration_date.after?(start_date)
      errors.add(:start_date, "must be before Expiration Date")
      errors.add(:expiration_date, "must be after Start Date")
    end
  end
end