S, Rajini (STSD) wrote:
> From: Gunnar Hjalmarsson [mailto:[email protected]]
>> S, Rajini (STSD) wrote:
>>>
>>> I am new to Perl Programming and have a query in perl.
>>>
>>> In perl is there any system defined functions to find out the
>>> Differences in dates.
>>>
>>> Eg :
>>>
>>> Date 1 -> 26-Jan-2009
>>> Date 2 -> 14-Jan-2009
>>>
>>> So the difference between two dates is 12 days.
>>>
>>> Is there a way to achieve this with any system defined functions In
>>> Perl ????
>>
>> It depends on what you mean by "system defined functions". As
>> others have told you, there are many CPAN modules that deal
>> with date and time related tasks. Your particular problem can
>> be easily solved using only a module that is included in the
>> standard Perl distribution.
>>
>> use Date::Parse;
>>
>> my $time1 = str2time '26-Jan-2009';
>> my $time2 = str2time '14-Jan-2009';
>>
>> print 'Difference: ',
>> sprintf( '%.0f', ($time1-$time2)/86400 ), " days\n";
>>
>
> Thanks Gunnar for the suggestions.
>
> In which version of perl is Parse module available.
>
> We have perl version 5.8.0 and parse module is not available.
(Please bottom-post your responses to this group. Thank you.)
As far as I know Gunnar is mistaken and Date::Parse is not a standard module in
any version of Perl. However Time::Local is, and you may be interested in the
solution below that uses it. If your dates aren't guaranteed to be well-formed
then you may want to do some checking on them before you call the epoch_days
function.
HTH,
Rob
use strict;
use warnings;
use Time::Local;
my $days1 = epoch_days('26-Jan-2009');
my $days2 = epoch_days('14-Jan-2009');
print "Difference: @{[$days1 - $days2]} days\n";
BEGIN {
my %month_num = do {
my $n = 1;
map(($_, $n++), qw/jan feb mar apr may jun jul aug sep oct nov dec/);
};
sub epoch_days {
my @dmy = split /-/, shift;
$dmy[1] = $month_num{lc $dmy[1]} || 0;
return timelocal(0, 0, 0, @dmy) / (24 * 60 * 60);
}
}
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/