你如何在Ruby中实现1.day.ago

Ari*_*N3o 1 ruby ruby-on-rails date helper

正如你们可能已经猜到的那样,这是一个面试问题.但我不会透露哪家公司.我被要求实施

1.day.ago
Run Code Online (Sandbox Code Playgroud)

在Ruby中.这是Rails中的日期帮助器,但Ruby中不存在此功能.

mea*_*gar 8

所有它*返回一天中的秒数,乘以self:

class Fixnum
  def day
    self * (60 * 60 * 24) # seconds * minutes * hours
  end
end


# 10.days => 'self' is 10, so 10 * 60 * 60 * 24
Run Code Online (Sandbox Code Playgroud)

然后,.agoTime.now以下几秒减去:

class Fixnum
  def ago
    Time.now - self
  end
end

# 10.days.ago == Time.now - (10 * 60 * 60 * 24) 
Run Code Online (Sandbox Code Playgroud)

*这实际上不是全部; 实际上它返回一个代表给定持续时间的代理对象.数学也复杂得多

  • 现实并非如此简单.有一天并不总是86400秒,因此真实版本中的所有ActiveSupport :: Duration内容都是如此. (2认同)