2 ################################################################################
4 # File: $RCSfile: MAPSUtil.pm,v $
5 # Revision: $Revision: 1.1 $
6 # Description: MAPS Utilities
7 # Author: Andrew@DeFaria.com
8 # Created: Fri Nov 29 14:17:21 2002
9 # Modified: $Date: 2013/06/12 14:05:47 $
12 # (c) Copyright 2000-2006, Andrew@DeFaria.com, all rights reserved.
14 ################################################################################
18 use vars qw (@ISA @EXPORT);
25 SQLDatetime2UnixDatetime
28 UnixDatetime2SQLDatetime
31 sub Today2SQLDatetime;
36 return substr $date, 5, 2 . '/' .
37 substr $date, 8, 2 . '/' .
44 my $hours = substr $time, 0, 2;
45 my $minutes = substr $time, 3, 2;
46 my $seconds = substr $time, 6, 2;
47 my $AmPm = $hours > 12 ? 'Pm' : 'Am';
49 $hours = $hours - 12 if $hours > 12;
51 return "$hours:$minutes:$seconds $AmPm";
54 sub SQLDatetime2UnixDatetime {
55 my ($sqldatetime) = @_;
72 my $year = substr $sqldatetime, 0, 4;
73 my $month = substr $sqldatetime, 5, 2;
74 my $day = substr $sqldatetime, 8, 2;
75 my $time = FormatTime substr $sqldatetime, 11;
77 return $months {$month} . " $day, $year \@ $time";
78 } # SQLDatetime2UnixDatetime
81 my ($timestamp,$nbr_of_days) = @_;
98 my $year = substr $timestamp, 0, 4;
99 my $month = substr $timestamp, 5, 2;
100 my $day = substr $timestamp, 8, 2;
107 last if $m >= $month;
112 # Subtract $nbr_of_days
113 $days += $day - $nbr_of_days;
115 # Compute $days_in_year
118 # Adjust if crossing year boundary
121 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
122 $days = $days_in_year + $days;
124 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
131 # If remaining days is less than the current month then last
132 last if ($days <= $months[$month]);
134 # Subtract off the number of days in this month
135 $days -= $months[$month++];
138 # Prefix month with 0 if necessary
141 $month = '0' . $month;
144 # Prefix days with 0 if necessary
147 } elsif ($days < 10) {
151 return $year . '-' . $month . '-' . $days . substr $timestamp, 10;
154 sub UnixDatetime2SQLDatetime {
155 my $datetime = shift;
157 my $orig_datetime = $datetime;
173 # Some mailers neglect to put the leading day of the week field in.
174 # Check for this and compensate.
175 my $dow = substr $datetime, 0, 3;
184 $datetime = 'XXX, ' . $datetime;
187 # Some mailers have day before month. We need to correct this
188 my $day = substr $datetime, 5, 2;
191 $day = '0' . (substr $day, 0, 1);
192 $datetime = (substr $datetime, 0, 5) . $day . (substr $datetime, 6);
195 if ($day !~ /\d\d/) {
196 $day = substr $datetime, 8, 2;
199 # Check for 1 digit date
200 if ((substr $day, 0, 1) eq ' ') {
201 $day = '0' . (substr $day, 1, 1);
202 $datetime = (substr $datetime, 0, 8) . $day . (substr $datetime, 10);
205 my $year = substr $datetime, 20, 4;
207 if ($year !~ /\d\d\d\d/) {
208 $year = substr $datetime, 12, 4;
209 if ($year !~ /\d\d\d\d/) {
210 $year = substr $datetime, 12, 2;
214 # Check for 2 digit year. Argh!
215 if (length $year == 2 or (substr $year, 2, 1) eq ' ') {
216 $year = '20' . (substr $year, 0, 2);
217 $datetime = (substr $datetime, 0, 12) . '20' . (substr $datetime, 12);
220 my $month_name = substr $datetime, 4, 3;
222 if (!defined $months {$month_name}) {
223 $month_name = substr $datetime, 8, 3;
225 my $month = $months {$month_name};
227 my $time = substr $datetime, 11, 8;
229 if ($time !~ /\d\d:\d\d:\d\d/) {
230 $time = substr $datetime, 17, 8
233 if (!defined $year) {
234 print "WARNING: Year undefined for $orig_datetime\nReturning today's date\n";
235 return Today2SQLDatetime;
237 if (!defined $month) {
238 print "Month undefined for $orig_datetime\nReturning today's date\n";
239 return Today2SQLDatetime;
242 print "Day undefined for $orig_datetime\nReturning today's date\n";
243 return Today2SQLDatetime;
245 if (!defined $time) {
246 print "Time undefined for $orig_datetime\nReturning today's date\n";
247 return Today2SQLDatetime;
250 return "$year-$month-$day $time";
251 } # UnixDatetime2SQLDatetime
253 sub Today2SQLDatetime {
254 return UnixDatetime2SQLDatetime scalar localtime;
255 } # Today2SQLDatetime