1

我有两个日期:start dateend date。我想计算 和 之间的天end datestart date。如果start dateis 1-11-2011, end dateis 2-11-2012, and I put start date - end date,它将显示天数为1,并且不会计算月份和年份。我怎样才能在红宝石中做到这一点?请帮助我。

4

3 回答 3

5
require "date"
(
  Date.strptime("2-11-2012", "%m-%d-%Y") -
  Date.strptime("1-11-2011", "%m-%d-%Y")
).to_i + 1
# => 397
于 2012-11-10T10:25:20.103 回答
4
require 'date'

start_date = Date.parse('1-11-2011')
# => #<Date: 2011-11-01 … >
end_date   = Date.parse('2-11-2012')
# => #<Date: 2012-11-02 … >

inclusive_days_in_range = (start_date .. end_date).count
# => 368

或者,如果您关心效率(快两个数量级):

inclusive_days_in_range = (end_date - start_date) + 1
# => 368

请注意,如果您使用Date.parse,给定的日期字符串将被解释为好像它以天开始,然后是月份和年份。如果这不是您想要的,您必须使用该Date.strptime方法手动指定您的日期格式,即使我不知道地球上有哪个国家会采用传统的日期格式。为了清楚并避免字符串解析,您还可以通过以下方式初始化 Date 对象:

Date.new(2012, 1, 11)

另一个好主意是在应用程序内部使用ISO-8601 (YYYY-MM-DD) 格式,并且只根据需要将它们转换为本地化表示以提高清晰度。

于 2012-11-10T14:02:51.773 回答
1

试试这个。

time_ago_in_words(pending_requests.created_at)

这将照顾好几天和几个小时,例如

about 17 hours ago 

3 days ago
于 2017-07-20T05:04:20.080 回答