No configuration option is required in this case. The OP isn't having trouble 
with date math: that would have done what he wanted.  

He's using the set() method to set the object to a date that doesn't exist. Any 
behavior beyond an error would be incorrect. 

Should ->new( year => 2012, month => 13, day => 42 ) assume you wanted Dec 31? 
No, it's an error. 

If you wanted 13 months, 42 days after Jan 1st 2012, then you should be using 
date math. 

Cheers!
Rick Measham
📱

On 03/03/2012, at 5:14, Karen Etheridge <[email protected]> wrote:

> On Thu, Mar 01, 2012 at 08:26:13PM -0800, Michael G Schwern wrote:
>> On 2012.3.1 2:14 PM, [email protected] wrote:
>>> If the date for $dt is 20120229, the following produces an error!
>>> 
>>> $dt->set_year($dt1->year + 1);
>>> 
>>> Invalid day of month (day = 29 - month = 2)
>> 
>> This error is correct, there is no Feb 29, 2013.
>> 
>> It could return March 1, 2013... but then adding a year to Feb 29, 2012 and
>> adding a year and a day give the same result which doesn't make sense.
>> 
>> It does present a problem... how do you reliably say "same date next year"?
> 
> This is very similar to the 'end_of_month_mode' feature in
> DateTime::Duration, which handles how (for example) "Jan 30 + 1 month"
> calculations are handled.  Therefore, I would suggest a configuration
> option for handling how wrapping is done involving leap years.
> 
> For that matter, leap seconds pose the same problem - if 00:00:60 is a
> leap second, how does one handle 00:00:60 + 1 minute? is it wrapped to the
> next minute (00:02:00), truncated (00:01:59), or...?
> 
> 
> -- 
>           #!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
>           $/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
>           lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
>            .             .            .            .             .
> Karen Etheridge, [email protected]       GCS C+++$ USL+++$ P+++$ w--- M++
> -- 
> Message  protected for iSite by MailGuard: e-mail anti-virus, anti-spam and 
> content filtering.http://www.mailguard.com.au
> Click here to report this message as spam:
> https://login.mailguard.com.au/report/1EfBtCKdpY/2VzzLrnXo9n13n6snrZNTJ/0
> 
-- 
Message  protected for iSite by MailGuard: e-mail anti-virus, anti-spam and 
content filtering.http://www.mailguard.com.au

Reply via email to