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);
21 $ENV{TZ}='America/Los_Angeles';
29 SQLDatetime2UnixDatetime
32 UnixDatetime2SQLDatetime
35 sub Today2SQLDatetime;
40 return substr ($date, 5, 2) . '/' .
41 substr ($date, 8, 2) . '/' .
48 my $hours = substr $time, 0, 2;
50 $hours = substr $hours, 1, 1 if $hours < 10;
52 my $minutes = substr $time, 3, 2;
53 my $seconds = substr $time, 6, 2;
54 my $AmPm = $hours > 12 ? 'Pm' : 'Am';
56 $hours = $hours - 12 if $hours > 12;
58 return "$hours:$minutes:$seconds $AmPm";
61 sub SQLDatetime2UnixDatetime {
62 my ($sqldatetime) = @_;
79 my $year = substr $sqldatetime, 0, 4;
80 my $month = substr $sqldatetime, 5, 2;
81 my $day = substr $sqldatetime, 8, 2;
82 my $time = FormatTime substr $sqldatetime, 11;
84 return $months {$month} . " $day, $year \@ $time";
85 } # SQLDatetime2UnixDatetime
88 my ($timestamp,$nbr_of_days) = @_;
105 my $year = substr $timestamp, 0, 4;
106 my $month = substr $timestamp, 5, 2;
107 my $day = substr $timestamp, 8, 2;
114 last if $m >= $month;
119 # Subtract $nbr_of_days
120 $days += $day - $nbr_of_days;
122 # Compute $days_in_year
125 # Adjust if crossing year boundary
128 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
129 $days = $days_in_year + $days;
131 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
138 # If remaining days is less than the current month then last
139 last if ($days <= $months[$month]);
141 # Subtract off the number of days in this month
142 $days -= $months[$month++];
145 # Prefix month with 0 if necessary
148 $month = '0' . $month;
151 # Prefix days with 0 if necessary
154 } elsif ($days < 10) {
158 return $year . '-' . $month . '-' . $days . substr $timestamp, 10;
161 sub UnixDatetime2SQLDatetime {
162 my $datetime = shift;
164 my $orig_datetime = $datetime;
180 # Some mailers neglect to put the leading day of the week field in.
181 # Check for this and compensate.
182 my $dow = substr $datetime, 0, 3;
191 $datetime = 'XXX, ' . $datetime;
194 # Some mailers have day before month. We need to correct this
195 my $day = substr $datetime, 5, 2;
198 $day = '0' . (substr $day, 0, 1);
199 $datetime = (substr $datetime, 0, 5) . $day . (substr $datetime, 6);
202 if ($day !~ /\d\d/) {
203 $day = substr $datetime, 8, 2;
206 # Check for 1 digit date
207 if ((substr $day, 0, 1) eq ' ') {
208 $day = '0' . (substr $day, 1, 1);
209 $datetime = (substr $datetime, 0, 8) . $day . (substr $datetime, 10);
212 my $year = substr $datetime, 20, 4;
214 if ($year !~ /\d\d\d\d/) {
215 $year = substr $datetime, 12, 4;
216 if ($year !~ /\d\d\d\d/) {
217 $year = substr $datetime, 12, 2;
221 # Check for 2 digit year. Argh!
222 if (length $year == 2 or (substr $year, 2, 1) eq ' ') {
223 $year = '20' . (substr $year, 0, 2);
224 $datetime = (substr $datetime, 0, 12) . '20' . (substr $datetime, 12);
227 my $month_name = substr $datetime, 4, 3;
229 if (!defined $months {$month_name}) {
230 $month_name = substr $datetime, 8, 3;
232 my $month = $months {$month_name};
234 my $time = substr $datetime, 11, 8;
236 if ($time !~ /\d\d:\d\d:\d\d/) {
237 $time = substr $datetime, 17, 8
240 if (!defined $year) {
241 print "WARNING: Year undefined for $orig_datetime\nReturning today's date\n";
242 return Today2SQLDatetime;
244 if (!defined $month) {
245 print "Month undefined for $orig_datetime\nReturning today's date\n";
246 return Today2SQLDatetime;
249 print "Day undefined for $orig_datetime\nReturning today's date\n";
250 return Today2SQLDatetime;
252 if (!defined $time) {
253 print "Time undefined for $orig_datetime\nReturning today's date\n";
254 return Today2SQLDatetime;
257 return "$year-$month-$day $time";
258 } # UnixDatetime2SQLDatetime
260 sub Today2SQLDatetime {
261 return UnixDatetime2SQLDatetime scalar localtime;
262 } # Today2SQLDatetime