in reply to Date::Calc / Delta_YMD funkyness?

Date::Calc is just working as advertised. In the docs, it's stated that Delta_YMD returns the vector [y2 - y1], [m2 - m1], [d2 - d1]. So the negative value is understandable.

Even taking absolute values, however, this is still sort of worthless because it lacks accountability for months with differing day counts, etc. The real way to do it is subtract your seconds since epoch and work back to YMD from the result.

Here's an example using Time::Piece and Time::Seconds:

#!/usr/bin/perl use Time::Piece; use Time::Seconds; $bd_time = Time::Piece->strptime("1973/07/19", "%Y/%m/%d"); $now = localtime(time); $diff = $now - $bd_time; $years = int($diff->years); $diff -= $years * ONE_YEAR; $months = int($diff->months); $diff -= $months * ONE_MONTH; $days = int($diff->days); print "$years years, $months months, $days days\n";

Today that yields 29 years, 1 month, 17 days. Use Lingua::EN::Inflect to season your output. Serves 4.

Matt

Replies are listed 'Best First'.
Re: Re: Date::Calc / Delta_YMD funkyness?
by jk2addict (Chaplain) on Sep 04, 2002 at 23:52 UTC

    "...that Delta_YMD returns the vector [y2 - y1], [m2 - m1], [d2 - d1]."

    Thank for the ClueBy4. Read it a few times, just didn't register clearly. I guess I took "Delta" to be a little bit more literal than plain ole subtraction.

    Many thanks for the code snippet. Time to study it for a while.