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 ################################################################################
20 use vars qw (@ISA @EXPORT);
23 $ENV{TZ}='America/Los_Angeles';
31 SQLDatetime2UnixDatetime
34 UnixDatetime2SQLDatetime
37 sub Today2SQLDatetime;
42 return substr ($date, 5, 2) . '/' .
43 substr ($date, 8, 2) . '/' .
50 my $hours = substr $time, 0, 2;
52 $hours = substr $hours, 1, 1 if $hours < 10;
54 my $minutes = substr $time, 3, 2;
55 my $seconds = substr $time, 6, 2;
56 my $AmPm = $hours > 12 ? 'Pm' : 'Am';
58 $hours = $hours - 12 if $hours > 12;
60 return "$hours:$minutes:$seconds $AmPm";
63 sub SQLDatetime2UnixDatetime {
64 my ($sqldatetime) = @_;
81 my $year = substr $sqldatetime, 0, 4;
82 my $month = substr $sqldatetime, 5, 2;
83 my $day = substr $sqldatetime, 8, 2;
84 my $time = FormatTime substr $sqldatetime, 11;
86 return $months {$month} . " $day, $year \@ $time";
87 } # SQLDatetime2UnixDatetime
90 my ($timestamp,$nbr_of_days) = @_;
107 my $year = substr $timestamp, 0, 4;
108 my $month = substr $timestamp, 5, 2;
109 my $day = substr $timestamp, 8, 2;
116 last if $m >= $month;
121 # Subtract $nbr_of_days
122 $days += $day - $nbr_of_days;
124 # Compute $days_in_year
127 # Adjust if crossing year boundary
130 $days_in_year = (($year % 4) == 0) ? 366 : 365;
131 $days = $days_in_year + $days;
133 $days_in_year = (($year % 4) == 0) ? 366 : 365;
140 # If remaining days is less than the current month then last
141 last if ($days <= $months[$month]);
143 # Subtract off the number of days in this month
144 $days -= $months[$month++];
147 # Prefix month with 0 if necessary
150 $month = '0' . $month;
153 # Prefix days with 0 if necessary
156 } elsif ($days < 10) {
160 return $year . '-' . $month . '-' . $days . substr $timestamp, 10;
163 sub UnixDatetime2SQLDatetime($) {
166 my $orig_datetime = $datetime;
182 # Some mailers neglect to put the leading day of the week field in.
183 # Check for this and compensate.
184 my $dow = substr $datetime, 0, 3;
193 $datetime = 'XXX, ' . $datetime;
196 # Some mailers have day before month. We need to correct this
197 my $day = substr $datetime, 5, 2;
200 $day = '0' . (substr $day, 0, 1);
201 $datetime = (substr $datetime, 0, 5) . $day . (substr $datetime, 6);
204 if ($day !~ /\d\d/) {
205 $day = substr $datetime, 8, 2;
208 # Check for 1 digit date
209 if ((substr $day, 0, 1) eq ' ') {
210 $day = '0' . (substr $day, 1, 1);
211 $datetime = (substr $datetime, 0, 8) . $day . (substr $datetime, 10);
214 my $year = substr $datetime, 20, 4;
216 if ($year !~ /\d\d\d\d/) {
217 $year = substr $datetime, 12, 4;
218 if ($year !~ /\d\d\d\d/) {
219 $year = substr $datetime, 12, 2;
223 # Check for 2 digit year. Argh!
224 if (length $year == 2 or (substr $year, 2, 1) eq ' ') {
225 $year = '20' . (substr $year, 0, 2);
226 $datetime = (substr $datetime, 0, 12) . '20' . (substr $datetime, 12);
229 my $month_name = substr $datetime, 4, 3;
231 if (!defined $months {$month_name}) {
232 $month_name = substr $datetime, 8, 3;
234 my $month = $months {$month_name};
236 my $time = substr $datetime, 11, 8;
238 if ($time !~ /\d\d:\d\d:\d\d/) {
239 $time = substr $datetime, 17, 8
242 if (!defined $year) {
243 print "WARNING: Year undefined for $orig_datetime\nReturning today's date\n";
244 return Today2SQLDatetime;
246 if (!defined $month) {
247 print "Month undefined for $orig_datetime\nReturning today's date\n";
248 return Today2SQLDatetime;
251 print "Day undefined for $orig_datetime\nReturning today's date\n";
252 return Today2SQLDatetime;
254 if (!defined $time) {
255 print "Time undefined for $orig_datetime\nReturning today's date\n";
256 return Today2SQLDatetime;
259 return "$year-$month-$day $time";
260 } # UnixDatetime2SQLDatetime
262 sub Today2SQLDatetime {
263 return UnixDatetime2SQLDatetime(scalar localtime);
264 } # Today2SQLDatetime