Advanced-Config
view release on metacpan or search on metacpan
lib/Advanced/Config/Date.pm view on Meta::CPAN
sub adjust_date_str
{
DBUG_ENTER_FUNC ( @_ );
my $date_str = shift;
my $adj_years = shift || 0;
my $adj_months = shift || 0;
# Validate the input date.
my ($year, $month, $day) = _validate_date_str ($date_str);
unless (defined $year &&
$adj_years =~ m/^[-]?\d+$/ && $adj_months =~ m/^[-]?\d+$/) {
return DBUG_RETURN ( undef );
}
# Adjust by month ...
if ( $adj_months >= 0 ) {
foreach (1..${adj_months}) {
if ( $month == 12 ) {
$month = 1;
++$adj_years;
} else {
++$month;
}
}
} else {
foreach (1..-${adj_months}) {
if ( $month == 1 ) {
$month = 12;
--$adj_years;
} else {
--$month;
}
}
}
# Adjust the years ...
$year += $adj_years;
# Build the returned date ...
my $leap = _is_leap_year ($year);
local $days_in_months[2] = $leap ? 29 : 28;
my $d = $days_in_months[$month];
$date_str = sprintf ("%04d-%02d-%02d", $year, $month,
($day <= $d) ? $day : $d);
DBUG_RETURN ($date_str);
}
# ==============================================================
=back
=head1 SOME EXAMPLE DATES
Here are some sample date strings in B<English> that this module can parse.
All for Christmas 2017. This is not a complete list of available date formats
supported. But should hopefully give you a starting point of what is possible.
Remember that if a date string contains extra info around the date part of it,
that extra information is thrown away.
S<12/25/2017>, B<S<Mon Dec 25th 2017 at 09:00>>, S<Mon 2017/12/25>, B<S<2017-12-25>>,
S<Monday December 25th, 2017 at 09:00>, B<S<12.25.2017>>, S<25-DEC-2017>,
B<S<25-DECEMBER-2017>>, S<20171225>, B<S<12252017>>,
S<Mon dec. 25th 00:00:00 2017>, B<S<2017 12 25 mon>>.
Most of the above examples will also work with 2-digit years as well.
And just to remind you that other languages are supported if L<Date::Language>
is installed, here's a date in Spanish that would be legal after
S<swap_language("Spanish")> was called.
=over 4
B<S<Lun Diciembre 25to 2017 18:05>>.
=back
=head1 COPYRIGHT
Copyright (c) 2018 - 2026 Curtis Leach. All rights reserved.
This program is free software. You can redistribute it and/or modify it under
the same terms as Perl itself.
=head1 SEE ALSO
L<Advanced::Config> - The main user of this module. It defines the Config object.
L<Advanced::Config::Options> - Handles the configuration of the Config module.
L<Advanced::Config::Reader> - Handles the parsing of the config file.
L<Advanced::Config::Examples> - Provides some sample config files and commentary.
L<Date::Language> - Provides foreign language support.
L<Date::Manip> - Provides additional foreign language support.
=cut
# ==============================================================
#required if module is included w/ require command;
1;
( run in 0.760 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )