我有两个日期:start date
和end date
。我想计算 和 之间的天end date
数start date
。如果start date
is 1-11-2011
, end date
is 2-11-2012
, and I put start date - end date
,它将显示天数为1
,并且不会计算月份和年份。我怎样才能在红宝石中做到这一点?请帮助我。
问问题
1519 次
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 回答