*** empty log message ***
[fa-stable.git] / includes / date_functions.inc
1 <?php
2
3 /*
4 date validation and parsing functions
5
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
10
11 */
12
13 function is_date($date_) 
14 {
15         global $dateseps;
16
17         if ($date_ == null || $date_ == "")
18                 return 0;
19         $how = user_date_format();
20         $sep = $dateseps[user_date_sep()];
21
22         $date_ = trim($date_);
23         $date_ = str_replace($sep, "", $date_);
24         if (strlen($date_) == 6) 
25         {
26                 if ($how == 0) 
27                 {
28                         $date_array[0] = substr($date_,2,2);
29                         $date_array[1] = substr($date_,0,2);
30                         $date_array[2] = substr($date_,4,2);
31                 } 
32                 elseif ($how == 1) 
33                 {
34                         $date_array[0] = substr($date_,0,2);
35                         $date_array[1] = substr($date_,2,2);
36                         $date_array[2] = substr($date_,4,2);
37                 } 
38                 else 
39                 {
40                         $date_array[0] = substr($date_,2,2);
41                         $date_array[1] = substr($date_,4,2);
42                         $date_array[2] = substr($date_,0,2);
43                 }
44         } 
45         elseif (strlen($date_) == 8) 
46         {
47                 if ($how == 0) 
48                 {
49                         $date_array[0] = substr($date_,2,2);
50                         $date_array[1] = substr($date_,0,2);
51                         $date_array[2] = substr($date_,4,4);
52                 } 
53                 elseif ($how == 1) 
54                 {
55                         $date_array[0] = substr($date_,0,2);
56                         $date_array[1] = substr($date_,2,2);
57                         $date_array[2] = substr($date_,4,4);
58                 } 
59                 else 
60                 {
61                         $date_array[0] = substr($date_,6,2);
62                         $date_array[1] = substr($date_,4,2);
63                         $date_array[2] = substr($date_,0,4);
64                 }
65         }
66         if ((int)$date_array[2] > 9999) 
67         {
68                 return 0;
69         }
70
71
72         if (is_long((int)$date_array[0]) && is_long((int)$date_array[1]) && is_long((int)$date_array[2]))
73         {
74                 if (checkdate((int)$date_array[1],(int)$date_array[0],(int)$date_array[2]))
75                 {
76                         return 1;
77                 }
78                 else
79                 {
80                         return 0;
81                 }
82         }
83         else
84         { /*Can't be in an appropriate DefaultDateFormat */
85                 return 0;
86         }
87 } //end of is_date function
88
89
90 function Today() 
91 {
92         return date(user_date_display());
93 }
94
95 function Now() 
96 {
97         if (user_date_format() == 0)
98                 return date("h:i a");
99         else
100                 return date("H:i");
101 }
102
103 function is_date_in_fiscalyear($date, $convert=false)
104 {
105         global $path_to_root;
106         include_once($path_to_root . "/admin/db/company_db.inc");
107
108         $myrow = get_current_fiscalyear();
109         if ($myrow['closed'] == 1)
110                 return 0;
111         if ($convert)
112                 $date2 = sql2date($date);
113         else
114                 $date2 = $date;
115         $begin = sql2date($myrow['begin']);
116         $end = sql2date($myrow['end']);
117         if (date1_greater_date2($begin, $date2) || date1_greater_date2($date2, $end))
118         {
119                 return 0;
120         }
121         return 1;
122 }
123
124 function begin_fiscalyear()
125 {
126         global $path_to_root;
127         include_once($path_to_root . "/admin/db/company_db.inc");
128
129         $myrow = get_current_fiscalyear();
130         return sql2date($myrow['begin']);
131 }
132
133 function end_fiscalyear()
134 {
135         global $path_to_root;
136         include_once($path_to_root . "/admin/db/company_db.inc");
137
138         $myrow = get_current_fiscalyear();
139         return sql2date($myrow['end']);
140 }
141
142 function begin_month($date)
143 {
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]));
146 }
147
148 function enc_month($date)
149 {
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]));
152 }
153
154 function add_days($date, $days) // accepts - values as well
155 {
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]));
158 }
159
160 function add_months($date, $months)
161 {
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]));
164 }
165
166 function add_years($date, $years)
167 {
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));
170 }
171
172 //_______________________________________________________________
173
174 function sql2date($date_) 
175 {
176         global $dateseps;
177
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)
183                 return "";
184
185         if (strpos($date_, "/")) 
186         { // In MySQL it could be either / or -
187                 $date_array = explode("/",$date_);
188         } 
189         elseif (strpos ($date_, "-")) 
190         {
191                 $date_array = explode("-",$date_);
192         }
193
194         if (strlen($date_array[2]) > 4) 
195         {  /*chop off the time stuff */
196                 $date_array[2]= substr($date_array[2],0,2);
197         }
198
199         if ($how == 1)
200         {
201                 return $date_array[2].$sep.$date_array[1].$sep.$date_array[0];
202         } 
203         elseif ($how == 0)
204         {
205                 return $date_array[1].$sep.$date_array[2].$sep.$date_array[0];
206         } 
207         else 
208         {
209                 return $date_array[0].$sep.$date_array[1].$sep.$date_array[2];
210         }
211
212 } // end function sql2date
213
214
215 function date2sql($date_)
216 {
217         global $dateseps;
218 /* takes a date in a the format specified in $DefaultDateFormat
219 and converts to a yyyy/mm/dd format */
220
221         $how = user_date_format();
222         $sep = $dateseps[user_date_sep()];
223
224         if ($date_ == null || strlen($date_) == 0)
225                 return "";
226
227         $date_ =trim($date_);
228         $date_ = str_replace($sep, "", $date_);
229
230         if (strlen($date_) == 6)
231         {
232                 if ($how == 0)
233                 {
234                         $date_array[0] = substr($date_,2,2);
235                         $date_array[1] = substr($date_,0,2);
236                         $date_array[2] = substr($date_,4,2);
237                 } 
238                 elseif ($how == 1)
239                 {
240                         $date_array[0] = substr($date_,0,2);
241                         $date_array[1] = substr($date_,2,2);
242                         $date_array[2] = substr($date_,4,2);
243                 } 
244                 else
245                 {
246                         $date_array[0]= substr($date_,4,2);
247                         $date_array[1]= substr($date_,2,2);
248                         $date_array[2]= substr($date_,0,2);
249                 }
250         }
251         elseif (strlen($date_) == 8)
252         {
253                 if ($how == 0)
254                 {
255                         $date_array[0] = substr($date_,2,2);
256                         $date_array[1] = substr($date_,0,2);
257                         $date_array[2] = substr($date_,4,4);
258                 } 
259                 elseif ($how == 1)
260                 {
261                         $date_array[0] = substr($date_,0,2);
262                         $date_array[1] = substr($date_,2,2);
263                         $date_array[2] = substr($date_,4,4);
264                 } 
265                 else
266                 {
267                         $date_array[0] = substr($date_,6,2);
268                         $date_array[1] = substr($date_,4,2);
269                         $date_array[2] = substr($date_,0,4);
270                 }
271         }
272
273 //to modify assumption in 2030
274
275         if ((int)$date_array[2] < 60)
276         {
277                 $date_array[2] = "20".$date_array[2];
278         } 
279         elseif ((int)$date_array[2] > 59 && (int)$date_array[2] < 100)
280         {
281                 $date_array[2] = "19".$date_array[2];
282         }
283         elseif ((int)$date_array[2] > 9999)
284         {
285                 return 0;
286         }
287         return $date_array[2]."/".$date_array[1]."/".$date_array[0];
288 }// end of function
289
290 function date1_greater_date2 ($date1, $date2) 
291 {
292
293 /* returns 1 true if date1 is greater than date_ 2 */
294
295         $date1 = date2sql($date1);
296         $date2 = date2sql($date2);
297         $date1_array = explode("/", $date1);
298         $date2_array = explode("/", $date2);
299
300         /*The 0 element of the array will be the year in either d/m/Y or m/d/Y formats */
301
302         if ($date1_array[0] > $date2_array[0])
303         {
304                 return 1;
305         }
306         elseif ($date1_array[0] == $date2_array[0])
307         {
308                 if ($date1_array[1] > $date2_array[1])
309                 {
310                         return 1;
311                 }
312                 elseif ($date1_array[1] == $date2_array[1])
313                 {
314                         if ($date1_array[2] > $date2_array[2])
315                         {
316                                 return 1;
317                         }
318                 }
319         }
320         return 0;
321 }
322
323
324 function date_diff ($date1, $date2, $period) 
325 {
326
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 */
330
331         $date1 = date2sql($date1);
332         $date2 = date2sql($date2);
333         $date1_array = explode("/", $date1);
334         $date2_array = explode("/", $date2);
335
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;
339
340 /* difference is the number of seconds between each date negative if date_ 2 > date_ 1 */
341
342         switch ($period) 
343         {
344                 case "d":
345                         return (int) ($difference/(24*60*60));
346                         break;
347                 case "w":
348                         return (int) ($difference/(24*60*60*7));
349                         break;
350                 case "m":
351                         return (int) ($difference/(24*60*60*30));
352                         break;
353                 case "s":
354                         return $difference;
355                         break;
356                 case "y":
357                         return (int) ($difference/(24*60*60*365.25));
358                         break;
359                 default:
360                         Return 0;
361         }
362 }
363
364 Function explode_date_to_dmy($date_)
365 {
366         $date_ = date2sql($date_);
367         if ($date_ == "") 
368         {
369                 $disp = user_date_display();
370                 echo "<br>Dates must be entered in the format $disp. Sent was $date_<br>";
371                 exit;
372         }
373         $date_array = explode("/", $date_);
374         $temp = $date_array[0];
375         $date_array[0] = $date_array[2];
376         $date_array[2] = $temp;
377         return $date_array;
378 }
379
380 Function get_day($date_)
381 {
382         $date_array = explode_date_to_dmy($date_);
383
384         return $date_array[0];
385 }
386
387 Function get_month($date_)
388 {
389         $date_array = explode_date_to_dmy($date_);
390
391         return $date_array[1];
392 }
393
394 Function get_year($date_)
395 {
396         $date_array = explode_date_to_dmy($date_);
397
398         return $date_array[2];
399 }
400
401
402
403
404 ?>