Issue #10588 has been updated by Imran "".

File SmartTime.rb added

Patch to the above bug :

~~~
class SmartTime < Time
  def self.mktime year, month, day
    case month
    when 4, 6, 9, 11
      if day == 31
        raise ArgumentError, 'argument out of range _ APR, JUNE, SEP, NOV', caller
      else
        super
      end
    when 2
        case day
        when 30, 31
          raise ArgumentError, 'argument out of range _ FEB', caller
        when 29
          if year%100 == 0
            if year%400 == 0
              super
            else
              raise ArgumentError, 'argument out of range _ FEB', caller
            end
          else
            if year%4 == 0
              super
            else
              raise ArgumentError, 'argument out of range _ FEB', caller
            end
          end
        else
          super
        end
    else
      super
    end
  end
end
~~~

----------------------------------------
Bug #10588: Invalid Dates
https://bugs.ruby-lang.org/issues/10588#change-50834

* Author: Imran ""
* Status: Rejected
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: 2.0.0-p481
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I was in the process of implementing a date-routine, which could prevent possible out-of-range/invalid date values.

The interpreter, rightfully, threw an out-of range error, when I tried any of the following:
puts Time.mktime 2014, 13, 32
puts Time.mktime 2014, 13, 32

No surprises there. However, when I tried:
puts Time.mktime 2014, 11, 31
The interpreter, happily produced: 2014-12-01.

A little intrigued, I went ahead and tried the following routine:
1.upto(12){|month| puts Time.mktime 2014, month, 31}

Result:
2014-01-31      ok
2014-03-03      ???
2014-03-31      ok
2014-05-01      ???
2014-05-31      ok
2014-07-01      ???
2014-07-31      ok
2014-08-31      ok
2014-10-01      ???
2014-10-31      ok
2014-12-01      ???
2014-12-31      ok

I hope, I've been able to describe this issue adequately.

Thanks Matz & all the contributors for bringing this wonderful tool to us.

Regards.

---Files--------------------------------
SmartTime.rb (953 Bytes)


-- 
https://bugs.ruby-lang.org/