1

と の 2 つの日付がstart dateありend dateます。end dateとの間の日数を計算したいstart datestart dateis 1-11-2011end dateis 2-11-2012、および 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

または、効率を重視する場合 (2 桁高速):

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 に答える