Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #9825: time_and_datetime_advance_honors_hours_minutes_seconds_from_root.diff

File time_and_datetime_advance_honors_hours_minutes_seconds_from_root.diff, 7.6 kB (added by danger, 1 year ago)

same as first patch but created from root dir

  • activesupport/test/core_ext/time_ext_test.rb

    old new  
    233233    assert_equal Time.utc(2005,2,22,15,45),    Time.utc(2005,2,22,15,15,10).change(:min => 45) 
    234234  end 
    235235 
    236   def test_plus 
     236  def test_advance 
    237237    assert_equal Time.local(2006,2,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 1) 
    238238    assert_equal Time.local(2005,6,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:months => 4) 
    239239    assert_equal Time.local(2012,9,28,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 7) 
    240240    assert_equal Time.local(2013,10,3,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5) 
     241    assert_equal Time.local(2001,12,27,15,15,10), Time.local(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    241242    assert_equal Time.local(2005,2,28,15,15,10), Time.local(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     243    assert_equal Time.local(2005,2,28,20,15,10), Time.local(2005,2,28,15,15,10).advance(:hours => 5) 
     244    assert_equal Time.local(2005,2,28,15,22,10), Time.local(2005,2,28,15,15,10).advance(:minutes => 7) 
     245    assert_equal Time.local(2005,2,28,15,15,19), Time.local(2005,2,28,15,15,10).advance(:seconds => 9) 
     246    assert_equal Time.local(2005,2,28,20,22,19), Time.local(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
     247    assert_equal Time.local(2005,2,28,10,8,1), Time.local(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
     248    assert_equal Time.local(2013,10,3,20,22,19), Time.local(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
    242249  end 
    243250 
    244   def test_utc_plus 
     251  def test_utc_advance 
    245252    assert_equal Time.utc(2006,2,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 1) 
    246253    assert_equal Time.utc(2005,6,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:months => 4) 
    247254    assert_equal Time.utc(2012,9,22,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 7, :months => 7) 
    248255    assert_equal Time.utc(2013,10,3,15,15,10), Time.utc(2005,2,22,15,15,10).advance(:years => 7, :months => 19, :days => 11) 
     256    assert_equal Time.utc(2001,12,27,15,15,10), Time.utc(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    249257    assert_equal Time.utc(2005,2,28,15,15,10), Time.utc(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     258    assert_equal Time.utc(2005,2,28,20,15,10), Time.utc(2005,2,28,15,15,10).advance(:hours => 5) 
     259    assert_equal Time.utc(2005,2,28,15,22,10), Time.utc(2005,2,28,15,15,10).advance(:minutes => 7) 
     260    assert_equal Time.utc(2005,2,28,15,15,19), Time.utc(2005,2,28,15,15,10).advance(:seconds => 9) 
     261    assert_equal Time.utc(2005,2,28,20,22,19), Time.utc(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
     262    assert_equal Time.utc(2005,2,28,10,8,1), Time.utc(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
     263    assert_equal Time.utc(2013,10,3,20,22,19), Time.utc(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
    250264  end 
    251265 
    252266  def test_next_week 
  • activesupport/test/core_ext/date_time_ext_test.rb

    old new  
    159159    assert_equal DateTime.civil(2005,2,22,15,45),    DateTime.civil(2005,2,22,15,15,10).change(:min => 45) 
    160160  end 
    161161 
    162   def test_plus 
     162  def test_advance 
    163163    assert_equal DateTime.civil(2006,2,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 1) 
    164164    assert_equal DateTime.civil(2005,6,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:months => 4) 
    165165    assert_equal DateTime.civil(2012,9,28,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 7) 
    166166    assert_equal DateTime.civil(2013,10,3,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5) 
     167    assert_equal DateTime.civil(2001,12,27,15,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:years => -3, :months => -2, :days => -1) 
    167168    assert_equal DateTime.civil(2005,2,28,15,15,10), DateTime.civil(2004,2,29,15,15,10).advance(:years => 1) #leap day plus one year 
     169    assert_equal DateTime.civil(2005,2,28,20,15,10), DateTime.civil(2005,2,28,15,15,10).advance(:hours => 5) 
     170    assert_equal DateTime.civil(2005,2,28,15,22,10), DateTime.civil(2005,2,28,15,15,10).advance(:minutes => 7) 
     171    assert_equal DateTime.civil(2005,2,28,15,15,19), DateTime.civil(2005,2,28,15,15,10).advance(:seconds => 9) 
     172    assert_equal DateTime.civil(2005,2,28,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:hours => 5, :minutes => 7, :seconds => 9) 
     173    assert_equal DateTime.civil(2005,2,28,10,8,1), DateTime.civil(2005,2,28,15,15,10).advance(:hours => -5, :minutes => -7, :seconds => -9) 
     174    assert_equal DateTime.civil(2013,10,3,20,22,19), DateTime.civil(2005,2,28,15,15,10).advance(:years => 7, :months => 19, :days => 5, :hours => 5, :minutes => 7, :seconds => 9) 
     175     
    168176  end 
    169177 
    170178  def test_next_week 
  • activesupport/lib/active_support/core_ext/date_time/calculations.rb

    old new  
    2828        end 
    2929 
    3030        # Uses Date to provide precise Time calculations for years, months, and days.  The +options+ parameter takes a hash with 
    31         # any of these keys: :months, :days, :years. 
     31        # any of these keys: :years, :months, :days, :hours, :minutes, :seconds. 
    3232        def advance(options) 
    3333          d = to_date.advance(options) 
    34           change(options.merge(:year => d.year, :month => d.month, :day => d.day)) 
     34          datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) 
     35          seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 
     36          seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) 
    3537        end 
    3638 
    3739        # Returns a new DateTime representing the time a number of seconds ago 
  • activesupport/lib/active_support/core_ext/time/calculations.rb

    old new  
    7272        end 
    7373 
    7474        # Uses Date to provide precise Time calculations for years, months, and days.  The +options+ parameter takes a hash with 
    75         # any of these keys: :months, :days, :years. 
     75        # any of these keys: :years, :months, :days, :hours, :minutes, :seconds. 
    7676        def advance(options) 
    7777          d = to_date.advance(options) 
    78           change(options.merge(:year => d.year, :month => d.month, :day => d.day)) 
     78          time_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) 
     79          seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600 
     80          seconds_to_advance == 0 ? time_advanced_by_date : time_advanced_by_date.since(seconds_to_advance) 
    7981        end 
    8082 
    8183        # Returns a new Time representing the time a number of seconds ago, this is basically a wrapper around the Numeric extension