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
34 sub SQLDatetime2UnixDatetime;
36 sub Today2SQLDatetime;
37 sub UnixDatetime2SQLDatetime;
42 return substr ($date, 5, 2) .
44 substr ($date, 8, 2) .
52 my $hours = substr $time, 0, 2;
53 my $minutes = substr $time, 3, 2;
54 my $AmPm = $hours > 12 ? "Pm" : "Am";
56 $hours = $hours - 12 if $hours > 12;
58 return "$hours:$minutes $AmPm";
61 sub SQLDatetime2UnixDatetime {
62 my $sqldatetime = shift;
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 = shift;
89 my $nbr_of_days = shift;
106 my $year = substr $timestamp, 0, 4;
107 my $month = substr $timestamp, 5, 2;
108 my $day = substr $timestamp, 8, 2;
115 last if $m >= $month;
120 # Subtract $nbr_of_days
121 $days += $day - $nbr_of_days;
123 # Compute $days_in_year
126 # Adjust if crossing year boundary
129 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
130 $days = $days_in_year + $days;
132 $days_in_year = (($year % 4) eq 0) ? 366 : 365;
139 # If remaining days is less than the current month then last
140 last if ($days <= $months[$month]);
142 # Subtract off the number of days in this month
143 $days -= $months[$month++];
146 # Prefix month with 0 if necessary
149 $month = "0" . $month;
152 # Prefix days with 0 if necessary
155 } elsif ($days < 10) {
159 return $year . "-" . $month . "-" . $days . substr $timestamp, 10;
162 sub Today2SQLDatetime {
163 return UnixDatetime2SQLDatetime (scalar (localtime));
164 } # Today2SQLDatetime
166 sub UnixDatetime2SQLDatetime {
167 my $datetime = shift;
169 my $orig_datetime = $datetime;
185 # Some mailers neglect to put the leading day of the week field in.
186 # Check for this and compensate.
187 my $dow = substr $datetime, 0, 3;
196 $datetime = "XXX, " . $datetime;
199 # Some mailers have day before month. We need to correct this
200 my $day = substr $datetime, 5, 2;
203 $day = "0" . (substr $day, 0, 1);
204 $datetime = (substr $datetime, 0, 5) . $day . (substr $datetime, 6);
207 if ($day !~ /\d\d/) {
208 $day = substr $datetime, 8, 2;
211 # Check for 1 digit date
212 if ((substr $day, 0, 1) eq " ") {
213 $day = "0" . (substr $day, 1, 1);
214 $datetime = (substr $datetime, 0, 8) . $day . (substr $datetime, 10);
217 my $year = substr $datetime, 20, 4;
219 if ($year !~ /\d\d\d\d/) {
220 $year = substr $datetime, 12, 4;
221 if ($year !~ /\d\d\d\d/) {
222 $year = substr $datetime, 12, 2;
226 # Check for 2 digit year. Argh!
227 if (length $year == 2 or (substr $year, 2, 1) eq " ") {
228 $year = "20" . (substr $year, 0, 2);
229 $datetime = (substr $datetime, 0, 12) . "20" . (substr $datetime, 12);
232 my $month_name = substr $datetime, 4, 3;
234 if (!defined $months {$month_name}) {
235 $month_name = substr $datetime, 8, 3;
237 my $month = $months {$month_name};
239 my $time = substr $datetime, 11, 8;
241 if ($time !~ /\d\d:\d\d:\d\d/) {
242 $time = substr $datetime, 17, 8
245 if (!defined $year) {
246 print "WARNING: Year undefined for $orig_datetime\nReturning today's date\n";
247 return Today2SQLDatetime;
249 if (!defined $month) {
250 print "Month undefined for $orig_datetime\nReturning today's date\n";
251 return Today2SQLDatetime;
254 print "Day undefined for $orig_datetime\nReturning today's date\n";
255 return Today2SQLDatetime;
257 if (!defined $time) {
258 print "Time undefined for $orig_datetime\nReturning today's date\n";
259 return Today2SQLDatetime;
262 return "$year-$month-$day $time";
263 } # UnixDatetime2SQLDatetime