Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Ruby减去日期_Ruby_Date_Time_Subtraction - Fatal编程技术网

用Ruby减去日期

用Ruby减去日期,ruby,date,time,subtraction,Ruby,Date,Time,Subtraction,我正在看ruby,玩日期/时间的游戏 irb(main):001:0> jamis_DOB = Time.mktime(2003, 10, 22, 06, 59) => Wed Oct 22 06:59:00 +0300 2003 irb(main):002:0> age = Time.now - jamis_DOB => 222934108.172989 irb(main):005:0> age_in_years = (((age / 3600) / 24) /

我正在看ruby,玩日期/时间的游戏

irb(main):001:0> jamis_DOB = Time.mktime(2003, 10, 22, 06, 59)
=> Wed Oct 22 06:59:00 +0300 2003
irb(main):002:0> age = Time.now - jamis_DOB
=> 222934108.172989
irb(main):005:0> age_in_years = (((age / 3600) / 24) / 365).to_i
=> 7
所以我的例子并不是很好,因为年龄加起来不知道是否有闰年。 我已经通过谷歌搜索了一些时间/日期教程,但还没有找到一种简单的方法来减去两个日期,然后在一年、几个月、几天内返回。。。格式。 我猜ruby有一个附加组件或内置的东西来实现这类功能。有人能告诉我是什么吗?(还有,如何找到这类问题的答案以供将来参考的建议?)

谢谢。

您想要的不是:

将给出今天和2000年1月1日之间的年差。它可能是可以改进的,我只是使用了每年的平均天数(365.25),这将为您提供正确的答案,除了极端的边缘情况

您也可以这样做:

require 'date'

years = 0
d = Date.civil(2000, 1, 1)
loop do
  d = d.next_year
  break if Date.today < d
  years += 1
end

谢谢西奥:)你的第三个建议激励我做。。。需要'date'date\u now=date.today dob=date.civil(2003,10,22)如果date\u now.month>dob.month age=date\u now.year-dob.year elsif date\u now.month==dob.month&&date\u now.day>dob.day age=date\u now.year-dob.year年龄=(date\u now.year-dob.year)-1结束打印“正确的年龄是:”,年龄,“\n“我还不能真正理解你的第二个建议,似乎无法让1.9运行来发挥作用。是的,你是对的,最后一个例子当然也必须考虑到月份和日期。中间的示例只对循环中的每个回合计算一年,并计算回合数。我把它改得更正确一点。我很困惑为什么Ruby总是在我的日期减法后返回一个
/1
,重要的是对上面提到的结果执行
以获得天数的值。
require 'date'

years = 0
d = Date.civil(2000, 1, 1)
loop do
  d = d.next_year
  break if Date.today < d
  years += 1
end
2010 - 2000 # => 10