Michael G Schwern wrote:
>It does present a problem... how do you reliably say "same date next year"?
"Same date next year" is exactly what the original poster asked DateTime
for, by using the set_year method, and he got the correct answer: "there
isn't one". Presumably what he actually wanted was "a year later",
which is a different question. DateTime does support it:
$dt->add(years=>1);
In the awkward case, it advances to March 1st:
$ perl -MDateTime -lwe '
$dt=DateTime->new(
year=>2012,
month=>2,
day=>29,
hour=>12,
minute=>0,
second=>0,
time_zone=>"UTC",
);
$dt->add(years=>1);
print $dt->iso8601;
'
2013-03-01T12:00:00
Of course, it has the downside that year addition isn't associative:
advancing from a February 29th by four years gives a different result
from advancing by one year four times.
>You can't add 365 days because that falls afoul of the leap year problem.
You can ask DateTime for that too:
$dt->add(days=>365);
It's nicer, in that day addition *is* associative. Of course, a quarter
of the time (when the 365 days spans a leap day), the 365-days-later
won't be the same-date-next-year. Is that what you mean by the "leap
year problem"?
-zefram