@@ -33,6 +33,8 @@ my %args = (
test_files => ((-d '.git' || $ENV{RELEASE_TESTING}) && -d 'xt') ? 't/ xt/' : 't/',
recursive_test_files => 1,
+
+
);
if (-d 'share') {
$args{share_dir} = 'share';
@@ -1,5 +1,9 @@
Revision history for Perl extension DateTime::Format::Pg.
+0.16010 2014-09-18T12:36:03Z
+ - Add support for various more interval units [pr #3]:
+ millenium, century, decade, month, week
+
0.16009 2013-08-25T04:51:15Z
- Fix typos [pr #2] (dsteinbrunner)
- Migrate to using Minilla for packaging
@@ -4,8 +4,10 @@
"Daisuke Maki <daisuke@endeworks.jp>"
],
"dynamic_config" : 0,
- "generated_by" : "Minilla/v0.6.4",
- "license" : "perl_5",
+ "generated_by" : "Minilla/v0.12.0",
+ "license" : [
+ "perl_5"
+ ],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
"version" : "2"
@@ -19,7 +21,8 @@
"share",
"eg",
"examples",
- "author"
+ "author",
+ "builder"
]
},
"prereqs" : {
@@ -55,7 +58,7 @@
"provides" : {
"DateTime::Format::Pg" : {
"file" : "lib/DateTime/Format/Pg.pm",
- "version" : "0.16009"
+ "version" : "0.16010"
}
},
"release_status" : "stable",
@@ -69,10 +72,11 @@
"web" : "https://github.com/lestrrat/DateTime-Format-Pg"
}
},
- "version" : "0.16009",
+ "version" : "0.16010",
"x_contributors" : [
"Vasily Chekalkin <bacek@bacek.com>",
"David Steinbrunner <dsteinbrunner@pobox.com>",
- "Daisuke Maki <lestrrat+github@gmail.com>"
+ "Henrik Pauli <henrik.pauli@gmail.com>",
+ "lestrrat <lestrrat+github@gmail.com>"
]
}
@@ -3,18 +3,18 @@ abstract: 'Parse and format PostgreSQL dates and times'
author:
- 'Daisuke Maki <daisuke@endeworks.jp>'
build_requires:
- ExtUtils::MakeMaker: 6.36
- Test::More: 0
+ ExtUtils::MakeMaker: '6.36'
+ Test::More: '0'
configure_requires:
- CPAN::Meta: 0
- CPAN::Meta::Prereqs: 0
- Module::Build: 0.38
+ CPAN::Meta: '0'
+ CPAN::Meta::Prereqs: '0'
+ Module::Build: '0.38'
dynamic_config: 0
-generated_by: 'Minilla/v0.6.4, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Minilla/v0.12.0, CPAN::Meta::Converter version 2.120921'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: DateTime-Format-Pg
no_index:
directory:
@@ -25,20 +25,22 @@ no_index:
- eg
- examples
- author
+ - builder
provides:
DateTime::Format::Pg:
file: lib/DateTime/Format/Pg.pm
- version: 0.16009
+ version: '0.16010'
requires:
- DateTime: 0.10
- DateTime::Format::Builder: 0.72
- DateTime::TimeZone: 0.05
+ DateTime: '0.10'
+ DateTime::Format::Builder: '0.72'
+ DateTime::TimeZone: '0.05'
resources:
bugtracker: https://github.com/lestrrat/DateTime-Format-Pg/issues
homepage: https://github.com/lestrrat/DateTime-Format-Pg
repository: git://github.com/lestrrat/DateTime-Format-Pg.git
-version: 0.16009
+version: '0.16010'
x_contributors:
- 'Vasily Chekalkin <bacek@bacek.com>'
- 'David Steinbrunner <dsteinbrunner@pobox.com>'
- - 'Daisuke Maki <lestrrat+github@gmail.com>'
+ - 'Henrik Pauli <henrik.pauli@gmail.com>'
+ - 'lestrrat <lestrrat+github@gmail.com>'
@@ -11,7 +11,7 @@ use DateTime::TimeZone 0.06;
use DateTime::TimeZone::UTC;
use DateTime::TimeZone::Floating;
-$VERSION = '0.16009';
+$VERSION = '0.16010';
$VERSION = eval $VERSION;
our @ISA = ('DateTime::Format::Builder');
@@ -561,19 +561,23 @@ If given an improperly formatted string, this method may die.
sub parse_duration {
my ($self, $string) = @_;
- my ($year, $mon, $day, $sgn, $hour, $min, $sec, $frc, $ago) = $string =~ m{
+ my ($mil, $cent, $dec, $year, $mon, $wk, $day, $sgn, $hour, $min, $sec, $frc, $ago) = $string =~ m{
\A # Start of string.
(?:\@\s*)? # Optional leading @.
- (?:([-+]?\d+)\s+years?\s*)? # years
- (?:([-+]?\d+)\s+mons?\s*)? # months
- (?:([-+]?\d+)\s+days?\s*)? # days
+ (?:([-+]?\d+)\s+(?:millennium|millennia|millenniums|mil|mils)\s*)? # millennia
+ (?:([-+]?\d+)\s+(?:century|centuries|cent|c)\s*)? # centuries
+ (?:([-+]?\d+)\s+(?:decade|decades|dec|decs)\s*)? # decades
+ (?:([-+]?\d+)\s+(?:year|years|yr|yrs|y)\s*)? # years
+ (?:([-+]?\d+)\s+(?:month|months|mon|mons)\s*)? # months
+ (?:([-+]?\d+)\s+(?:week|weeks|w)\s*)? # weeks
+ (?:([-+]?\d+)\s+(?:day|days|d)\s*)? # days
(?: # Start h/m/s
# hours
(?:([-+])?([0-9]\d|[1-9]\d{2,}(?=:)|\d+(?=\s+hour))(?:\s+hours?)?\s*)?
# minutes
- (?::?((?<=:)[012345]\d|\d+(?=\s+mins?))(?:\s+mins?)?\s*)?
+ (?::?((?<=:)[012345]\d|\d+(?=\s+min(?:ute)?s?))(?:\s+min(?:ute)?s?)?\s*)?
# seconds
- (?::?((?<=:)[012345]\d|\d+(?=\.|\s+secs?))(\.\d+)?(?:\s+secs?)?\s*)?
+ (?::?((?<=:)[012345]\d|\d+(?=\.|\s+sec(?:ond)?s?))(\.\d+)?(?:\s+sec(?:ond)?s?)?\s*)?
?) # End hh:mm:ss
(ago)? # Optional inversion
\z # End of string
@@ -589,7 +593,11 @@ sub parse_duration {
# DT::Duration only stores years, days, months, seconds (and
# nanoseconds)
+ $year += 1000 * $mil if $mil;
+ $year += 100 * $cent if $cent;
+ $year += 10 * $dec if $dec;
$mon += 12 * $year if $year;
+ $day += 7 * $wk if $wk;
$min += 60 * $hour if $hour;
# HH:MM:SS.FFFF share a single sign
@@ -28,7 +28,9 @@ BEGIN
[ '-23:59' => DateTime::Duration->new(hours => -23, minutes => -59) ],
[ '-1 days -00:01' => DateTime::Duration->new( days => -1, minutes => -1) ],
[ '1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
+ [ '1 month -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
[ '@ 1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
+ [ '@ 1 month -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
[ '-1 days +02:03:00' => DateTime::Duration->new(days => -1)
->add(
hours => 2,
@@ -50,7 +52,10 @@ BEGIN
[ '@ 1 day 1 min ago' => DateTime::Duration->new( days => -1, minutes => -1 )],
[ '10 days' => DateTime::Duration->new(days => 10 ) ],
[ '34 years' => DateTime::Duration->new(years => 34 )],
+ [ '3 mon' => DateTime::Duration->new(months => 3 )],
[ '3 mons' => DateTime::Duration->new(months => 3 )],
+ [ '3 month' => DateTime::Duration->new(months => 3 )],
+ [ '3 months' => DateTime::Duration->new(months => 3 )],
[ '-00:00:14' => DateTime::Duration->new(seconds => -14 )],
[ '1 day 02:03:04' => DateTime::Duration->new(
days => 1,
@@ -61,10 +66,16 @@ BEGIN
[ '5 mons 12:00:00' => DateTime::Duration->new( months => 5, hours => 12) ],
[ '@ 1 min' => DateTime::Duration->new(minutes => 1 )],
+ [ '@ 1 mins' => DateTime::Duration->new(minutes => 1 )],
+ [ '@ 1 minute' => DateTime::Duration->new(minutes => 1 )],
+ [ '@ 1 minutes' => DateTime::Duration->new(minutes => 1 )],
[ '@ 5 hours' => DateTime::Duration->new( hours => 5 )],
[ '@ 34 years' => DateTime::Duration->new(years => 34 )],
[ '@ 3 mons' => DateTime::Duration->new(months => 3 )],
+ [ '@ 14 sec ago' => DateTime::Duration->new( seconds => -14 )],
[ '@ 14 secs ago' => DateTime::Duration->new( seconds => -14 )],
+ [ '@ 14 second ago' => DateTime::Duration->new( seconds => -14 )],
+ [ '@ 14 seconds ago' => DateTime::Duration->new( seconds => -14 )],
[ '@ 1 day 2 hours 3 mins 4 secs' => DateTime::Duration->new(
days => 1,
hours => 2,
@@ -94,6 +105,46 @@ BEGIN
hours => -2,
minutes => -3,
)],
+
+ [ '1 millennium' => DateTime::Duration->new( years => 1000 )],
+ [ '2 millennia' => DateTime::Duration->new( years => 2000 )],
+ [ '3 millenniums' => DateTime::Duration->new( years => 3000 )],
+ [ '1 mil' => DateTime::Duration->new( years => 1000 )],
+ [ '2 mils' => DateTime::Duration->new( years => 2000 )],
+
+ [ '1 century' => DateTime::Duration->new( years => 100 )],
+ [ '2 centuries' => DateTime::Duration->new( years => 200 )],
+ [ '1 cent' => DateTime::Duration->new( years => 100 )],
+ [ '2 c' => DateTime::Duration->new( years => 200 )],
+
+ [ '1 decade' => DateTime::Duration->new( years => 10 )],
+ [ '2 decades' => DateTime::Duration->new( years => 20 )],
+ [ '1 dec' => DateTime::Duration->new( years => 10 )],
+ [ '2 decs' => DateTime::Duration->new( years => 20 )],
+
+ [ '1 year' => DateTime::Duration->new( years => 1 )],
+ [ '2 years' => DateTime::Duration->new( years => 2 )],
+ [ '1 y' => DateTime::Duration->new( years => 1 )],
+ [ '1 yr' => DateTime::Duration->new( years => 1 )],
+ [ '2 yrs' => DateTime::Duration->new( years => 2 )],
+
+ [ '1 mil 9 c 6 decade 2 yr' => DateTime::Duration->new( years => 1962 )],
+
+ [ '1 month' => DateTime::Duration->new( months => 1 )],
+ [ '2 months' => DateTime::Duration->new( months => 2 )],
+ [ '1 mon' => DateTime::Duration->new( months => 1 )],
+ [ '2 mons' => DateTime::Duration->new( months => 2 )],
+
+ [ '1 week' => DateTime::Duration->new( weeks => 1 )],
+ [ '2 weeks' => DateTime::Duration->new( weeks => 2 )],
+ [ '1 w' => DateTime::Duration->new( weeks => 1 )],
+
+ [ '1 day' => DateTime::Duration->new( days => 1 )],
+ [ '2 days' => DateTime::Duration->new( days => 2 )],
+ [ '1 d' => DateTime::Duration->new( days => 1 )],
+
+ [ '1 mil 2 c 4 decade 8 yr 9 months 18 d ' => DateTime::Duration->new( years => 1248, months => 9, days => 18 )],
+ [ '12 yr 42 w' => DateTime::Duration->new( years => 12, weeks => 42 )],
);
plan tests => @negative_data + @positive_data + 1;