File Coverage

blib/lib/MySQL/DateFormat.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package MySQL::DateFormat;
2              
3 1     1   621 use strict;
  1         2  
  1         30  
4 1     1   4 use Carp;
  1         2  
  1         74  
5 1     1   3184 use Date::Calc;
  0            
  0            
6              
7             use vars qw($VERSION $VERSION_DATE);
8              
9             $VERSION = "1.01";
10             $VERSION_DATE = "January 9, 2002";
11              
12             sub new {
13             my $proto = shift;
14             my $class = ref($proto) || $proto;
15             my $self = {};
16             %{ $self->{args} } = @_;
17             unless ($self->{args}->{format}) {
18             croak "[$$] No format specified. Value of 'format' arg must be 'us' or 'eu'.";
19             }
20             bless($self, $class);
21             return $self;
22             }
23              
24             sub toMySQL {
25             my $self = shift;
26             my $date = shift;
27            
28             unless ($date) {
29             carp "[$$] No date supplied";
30             return 0;
31             }
32              
33             $date =~ s#/#-#g; # we accept either
34            
35             my ($d, $m, $y);
36             my ($a, $b, $c) = split("-", $date);
37              
38             unless ($a and $b and $c) {
39             carp "[$$] Invalid date [$a/$b/$c]";
40             return 0;
41             }
42              
43             if ($self->{args}->{format} eq 'eu') {
44             # Europe format: DD/MM/YYYY
45             $d = $a; $m = $b; $y = $c;
46             } elsif ($self->{args}->{format} eq 'us') {
47             # USA format: MM/DD/YYYY
48             $m = $a; $d = $b; $y = $c;
49             } else {
50             carp "[$$] Invalid format specified. Value of 'format' arg must be 'us' or 'eu'.";
51             return 0;
52             }
53              
54             if ($self->{args}->{century_cutoff} and $self->{args}->{century_cutoff} eq 'disallow'
55             and $y !~ m/^\d{4}$/) {
56             carp "[$$] Two-digit year supplied when four digits required";
57             return 0;
58             }
59              
60             $m = sprintf("%0.2d", $m);
61             $d = sprintf("%0.2d", $d);
62              
63             my $cutoff = 20;
64             if ($self->{args}->{century_cutoff} and $self->{args}->{century_cutoff} =~ m/^\d{1,2}$/) {
65             $cutoff = $self->{args}->{century_cutoff};
66             }
67             $y = ($y < 100) ? ($y > $cutoff) ? $y + 1900 : $y + 2000 : $y;
68              
69             unless (Date::Calc::check_date($y,$m,$d)) {
70             carp "[$$] Invalid date [y:$y m:$m d:$d]";
71             return 0;
72             }
73              
74             return join("-", $y, $m, $d);
75             }
76              
77             sub frMySQL {
78             my $self = shift;
79             my $date = shift;
80              
81             unless ($date) {
82             carp "[$$] No date supplied";
83             return 0;
84             }
85            
86             $date =~ s#/#-#g;
87             my ($y,$m,$d) = split("-", $date);
88              
89             unless (Date::Calc::check_date($y,$m,$d)) {
90             carp "[$$] Invalid date [y:$y m:$m d:$d]";
91             return 0;
92             }
93              
94             if ($self->{args}->{informal}) {
95             $m =~ s/^0//;
96             $d =~ s/^0//;
97             }
98            
99             my $separator = '/';
100             if ($self->{args}->{separator}) {
101             $separator = $self->{args}->{separator};
102             }
103              
104             my @elements = ($m,$d,$y);
105             @elements = ($d,$m,$y) if $self->{args}->{format} and $self->{args}->{format} eq 'eu';
106              
107             return join($separator, @elements);
108             }
109              
110             1;
111              
112             __END__