4 date validation and parsing functions
6 These functions refer to the global variable defining the date format
7 The date format is defined in config.php called DefaultDateFormat
8 this can be a string either "d/m/Y" for UK/Australia/New Zealand dates or
9 "m/d/Y" for US/Canada format dates
13 function is_date($date_)
17 if ($date_ == null || $date_ == "")
19 $how = user_date_format();
20 $sep = $dateseps[user_date_sep()];
22 $date_ = trim($date_);
23 $date_ = str_replace($sep, "", $date_);
24 if (strlen($date_) == 6)
28 $date_array[0] = substr($date_,2,2);
29 $date_array[1] = substr($date_,0,2);
30 $date_array[2] = substr($date_,4,2);
34 $date_array[0] = substr($date_,0,2);
35 $date_array[1] = substr($date_,2,2);
36 $date_array[2] = substr($date_,4,2);
40 $date_array[0] = substr($date_,2,2);
41 $date_array[1] = substr($date_,4,2);
42 $date_array[2] = substr($date_,0,2);
45 elseif (strlen($date_) == 8)
49 $date_array[0] = substr($date_,2,2);
50 $date_array[1] = substr($date_,0,2);
51 $date_array[2] = substr($date_,4,4);
55 $date_array[0] = substr($date_,0,2);
56 $date_array[1] = substr($date_,2,2);
57 $date_array[2] = substr($date_,4,4);
61 $date_array[0] = substr($date_,6,2);
62 $date_array[1] = substr($date_,4,2);
63 $date_array[2] = substr($date_,0,4);
66 if ((int)$date_array[2] > 9999)
72 if (is_long((int)$date_array[0]) && is_long((int)$date_array[1]) && is_long((int)$date_array[2]))
74 if (checkdate((int)$date_array[1],(int)$date_array[0],(int)$date_array[2]))
84 { /*Can't be in an appropriate DefaultDateFormat */
87 } //end of is_date function
92 return date(user_date_display());
97 if (user_date_format() == 0)
103 function is_date_in_fiscalyear($date, $convert=false)
105 global $path_to_root;
106 include_once($path_to_root . "/admin/db/company_db.inc");
108 $myrow = get_current_fiscalyear();
109 if ($myrow['closed'] == 1)
112 $date2 = sql2date($date);
115 $begin = sql2date($myrow['begin']);
116 $end = sql2date($myrow['end']);
117 if (date1_greater_date2($begin, $date2) || date1_greater_date2($date2, $end))
124 function begin_fiscalyear()
126 global $path_to_root;
127 include_once($path_to_root . "/admin/db/company_db.inc");
129 $myrow = get_current_fiscalyear();
130 return sql2date($myrow['begin']);
133 function end_fiscalyear()
135 global $path_to_root;
136 include_once($path_to_root . "/admin/db/company_db.inc");
138 $myrow = get_current_fiscalyear();
139 return sql2date($myrow['end']);
142 function begin_month($date)
144 $date_array = explode_date_to_dmy($date);
145 return date(user_date_display(), Mktime(0,0,0, $date_array[1], 1, $date_array[2]));
148 function enc_month($date)
150 $date_array = explode_date_to_dmy($date);
151 return date(user_date_display(), Mktime(0,0,0, $date_array[1] + 1, 0, $date_array[2]));
154 function add_days($date, $days) // accepts - values as well
156 $date_array = explode_date_to_dmy($date);
157 return date(user_date_display(), Mktime(0,0,0, $date_array[1], $date_array[0] + $days, $date_array[2]));
160 function add_months($date, $months)
162 $date_array = explode_date_to_dmy($date);
163 return date(user_date_display(), Mktime(0,0,0, $date_array[1] + $months, $date_array[0], $date_array[2]));
166 function add_years($date, $years)
168 $date_array = explode_date_to_dmy($date);
169 return date(user_date_display(), Mktime(0,0,0, $date_array[1], $date_array[0], $date_array[2] + $years));
172 //_______________________________________________________________
174 function sql2date($date_)
178 //for MySQL dates are in the format YYYY-mm-dd
179 $date_array = array();
180 $how = user_date_format();
181 $sep = $dateseps[user_date_sep()];
182 if ($date_ == null || strlen($date_) == 0)
185 if (strpos($date_, "/"))
186 { // In MySQL it could be either / or -
187 $date_array = explode("/",$date_);
189 elseif (strpos ($date_, "-"))
191 $date_array = explode("-",$date_);
194 if (strlen($date_array[2]) > 4)
195 { /*chop off the time stuff */
196 $date_array[2]= substr($date_array[2],0,2);
201 return $date_array[2].$sep.$date_array[1].$sep.$date_array[0];
205 return $date_array[1].$sep.$date_array[2].$sep.$date_array[0];
209 return $date_array[0].$sep.$date_array[1].$sep.$date_array[2];
212 } // end function sql2date
215 function date2sql($date_)
218 /* takes a date in a the format specified in $DefaultDateFormat
219 and converts to a yyyy/mm/dd format */
221 $how = user_date_format();
222 $sep = $dateseps[user_date_sep()];
224 if ($date_ == null || strlen($date_) == 0)
227 $date_ =trim($date_);
228 $date_ = str_replace($sep, "", $date_);
230 if (strlen($date_) == 6)
234 $date_array[0] = substr($date_,2,2);
235 $date_array[1] = substr($date_,0,2);
236 $date_array[2] = substr($date_,4,2);
240 $date_array[0] = substr($date_,0,2);
241 $date_array[1] = substr($date_,2,2);
242 $date_array[2] = substr($date_,4,2);
246 $date_array[0]= substr($date_,4,2);
247 $date_array[1]= substr($date_,2,2);
248 $date_array[2]= substr($date_,0,2);
251 elseif (strlen($date_) == 8)
255 $date_array[0] = substr($date_,2,2);
256 $date_array[1] = substr($date_,0,2);
257 $date_array[2] = substr($date_,4,4);
261 $date_array[0] = substr($date_,0,2);
262 $date_array[1] = substr($date_,2,2);
263 $date_array[2] = substr($date_,4,4);
267 $date_array[0] = substr($date_,6,2);
268 $date_array[1] = substr($date_,4,2);
269 $date_array[2] = substr($date_,0,4);
273 //to modify assumption in 2030
275 if ((int)$date_array[2] < 60)
277 $date_array[2] = "20".$date_array[2];
279 elseif ((int)$date_array[2] > 59 && (int)$date_array[2] < 100)
281 $date_array[2] = "19".$date_array[2];
283 elseif ((int)$date_array[2] > 9999)
287 return $date_array[2]."/".$date_array[1]."/".$date_array[0];
290 function date1_greater_date2 ($date1, $date2)
293 /* returns 1 true if date1 is greater than date_ 2 */
295 $date1 = date2sql($date1);
296 $date2 = date2sql($date2);
297 $date1_array = explode("/", $date1);
298 $date2_array = explode("/", $date2);
300 /*The 0 element of the array will be the year in either d/m/Y or m/d/Y formats */
302 if ($date1_array[0] > $date2_array[0])
306 elseif ($date1_array[0] == $date2_array[0])
308 if ($date1_array[1] > $date2_array[1])
312 elseif ($date1_array[1] == $date2_array[1])
314 if ($date1_array[2] > $date2_array[2])
324 function date_diff ($date1, $date2, $period)
327 /* expects dates in the format specified in $DefaultDateFormat - period can be one of 'd','w','y','m'
328 months are assumed to be 30 days and years 365.25 days This only works
329 provided that both dates are after 1970. Also only works for dates up to the year 2035 ish */
331 $date1 = date2sql($date1);
332 $date2 = date2sql($date2);
333 $date1_array = explode("/", $date1);
334 $date2_array = explode("/", $date2);
336 $date1_Stamp = mktime(0,0,0, (int)$date1_array[1],(int)$date1_array[2],(int)$date1_array[0]);
337 $date2_Stamp = mktime(0,0,0, (int)$date2_array[1],(int)$date2_array[2],(int)$date2_array[0]);
338 $difference = $date1_Stamp - $date2_Stamp;
340 /* difference is the number of seconds between each date negative if date_ 2 > date_ 1 */
345 return (int) ($difference/(24*60*60));
348 return (int) ($difference/(24*60*60*7));
351 return (int) ($difference/(24*60*60*30));
357 return (int) ($difference/(24*60*60*365.25));
364 Function explode_date_to_dmy($date_)
366 $date_ = date2sql($date_);
369 $disp = user_date_display();
370 echo "<br>Dates must be entered in the format $disp. Sent was $date_<br>";
373 $date_array = explode("/", $date_);
374 $temp = $date_array[0];
375 $date_array[0] = $date_array[2];
376 $date_array[2] = $temp;
380 Function get_day($date_)
382 $date_array = explode_date_to_dmy($date_);
384 return $date_array[0];
387 Function get_month($date_)
389 $date_array = explode_date_to_dmy($date_);
391 return $date_array[1];
394 Function get_year($date_)
396 $date_array = explode_date_to_dmy($date_);
398 return $date_array[2];