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);
22 # Not sure why I was setting TZ to LA but I'm in Phoenix now. This is best
23 # handled by configuring the OS correctly anyway.
25 # $ENV{TZ}='America/Los_Angeles';
34 SQLDatetime2UnixDatetime
37 UnixDatetime2SQLDatetime
40 sub Today2SQLDatetime;
45 return substr ($date, 5, 2) . '/' .
46 substr ($date, 8, 2) . '/' .
53 my $hours = substr $time, 0, 2;
55 $hours = substr $hours, 1, 1 if $hours < 10;
57 my $minutes = substr $time, 3, 2;
58 my $seconds = substr $time, 6, 2;
59 my $AmPm = $hours > 12 ? 'Pm' : 'Am';
61 $hours = $hours - 12 if $hours > 12;
63 return "$hours:$minutes:$seconds $AmPm";
66 sub SQLDatetime2UnixDatetime($) {
67 my ($sqldatetime) = @_;
84 my $year = substr $sqldatetime, 0, 4;
85 my $month = substr $sqldatetime, 5, 2;
86 my $day = substr $sqldatetime, 8, 2;
87 my $time = FormatTime substr $sqldatetime, 11;
89 return $months {$month} . " $day, $year \@ $time";
90 } # SQLDatetime2UnixDatetime
92 sub SubtractDays($$) {
93 my ($timestamp,$nbr_of_days) = @_;
110 my $year = substr $timestamp, 0, 4;
111 my $month = substr $timestamp, 5, 2;
112 my $day = substr $timestamp, 8, 2;
119 last if $m >= $month;
124 # Subtract $nbr_of_days
125 $days += $day - $nbr_of_days;
127 # Compute $days_in_year
130 # Adjust if crossing year boundary
133 $days_in_year = (($year % 4) == 0) ? 366 : 365;
134 $days = $days_in_year + $days;
136 $days_in_year = (($year % 4) == 0) ? 366 : 365;
143 # If remaining days is less than the current month then last
144 last if ($days <= $months[$month]);
146 # Subtract off the number of days in this month
147 $days -= $months[$month++];
150 # Prefix month with 0 if necessary
153 $month = '0' . $month;
156 # Prefix days with 0 if necessary
159 } elsif ($days < 10) {
163 return $year . '-' . $month . '-' . $days . substr $timestamp, 10;
166 sub UnixDatetime2SQLDatetime($) {
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
265 sub Today2SQLDatetime() {
266 return UnixDatetime2SQLDatetime(scalar localtime);
267 } # Today2SQLDatetime
270 my ($username, $domain) = @_;
272 # Check to see if a full email address in either $username or $domain
273 if ($username eq '') {
274 return '' if $domain eq '';
276 if ($domain =~ /(.*)\@(.*)/) {
277 ($username, $domain) = split '@', $domain;
279 } elsif ($domain eq '') {
280 if ($username =~ /(.*)\@(.*)/) {
281 ($username, $domain) = split '@', $username;
285 return lc "$username\@$domain";