日期之间的天数

时间:2012-11-10 09:58:19

标签: ruby date date-arithmetic

我有两个日期:start dateend date。我想计算end datestart date之间的天数。如果start date1-11-2011end date2-11-2012,而我放start date - end date,则会将天数显示为1,并且不计算月份和年份。我怎么能用红宝石做到这一点?请帮助我。

3 个答案:

答案 0 :(得分:5)

require "date"
(
  Date.strptime("2-11-2012", "%m-%d-%Y") -
  Date.strptime("1-11-2011", "%m-%d-%Y")
).to_i + 1
# => 397

答案 1 :(得分: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)格式,并且只能根据需要将它们转换为本地化表示,以提高清晰度。

答案 2 :(得分:0)

试试这个。

$content = "Someone purchase your picture".<br><br>;

foreach ($request->input('pic') as $key => $value) {
    $content .= "$key : $value".<br>;
    }

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

time_ago_in_words(pending_requests.created_at)

about 17 hours ago 
相关问题