Activated strict SQL mode, minor SQL injection fix, fixed _vl() debug helper.
[fa-stable.git] / includes / date_functions.inc
index c681353109eb44ae7548d706fd3b3d0f3e92c3e5..e90e2e781e6b37fdc5c819d666d7f7127a948e5f 100644 (file)
 date validation and parsing functions
 
 These functions refer to the global variable defining the date format
 date validation and parsing functions
 
 These functions refer to the global variable defining the date format
-The date format is defined in config.php called DefaultDateFormat
+The date format is defined in config.php called dateformats
 this can be a string either "d/m/Y" for UK/Australia/New Zealand dates or
 this can be a string either "d/m/Y" for UK/Australia/New Zealand dates or
-"m/d/Y" for US/Canada format dates
+"m/d/Y" for US/Canada format dates depending on setting in preferences.
 
 */
 
 function __date($year, $month, $day)
 {
 
 */
 
 function __date($year, $month, $day)
 {
-       global $dateseps;
+       global $SysPrefs, $tmonths;
        
        $how = user_date_format();
        
        $how = user_date_format();
-       $sep = $dateseps[user_date_sep()];
+       $sep = $SysPrefs->dateseps[user_date_sep()];
        $day = (int)$day;
        $month = (int)$month;
        $day = (int)$day;
        $month = (int)$month;
-       if ($day < 10)
-               $day = "0".$day;
-       if ($month < 10)
-               $month = "0".$month;
+       if ($how < 3)
+       {
+               if ($day < 10)
+                       $day = "0".$day;
+               if ($month < 10)
+                       $month = "0".$month;
+       }               
        if ($how == 0)
                return $month.$sep.$day.$sep.$year;
        if ($how == 0)
                return $month.$sep.$day.$sep.$year;
-       else if ($how == 1)
+       elseif ($how == 1)
                return $day.$sep.$month.$sep.$year;
                return $day.$sep.$month.$sep.$year;
-       else
+       elseif ($how == 2)
                return $year.$sep.$month.$sep.$day;
                return $year.$sep.$month.$sep.$day;
+       elseif ($how == 3)
+               return $tmonths[$month].$sep.$day.$sep.$year;
+       elseif ($how == 4)
+               return $day.$sep.$tmonths[$month].$sep.$year;
+       else
+               return $year.$sep.$tmonths[$month].$sep.$day;
 }
 
 function is_date($date_) 
 {
 }
 
 function is_date($date_) 
 {
-       global $dateseps;
+       global $SysPrefs;
 
        if ($date_ == null || $date_ == "")
                return 0;
        $how = user_date_format();
 
        if ($date_ == null || $date_ == "")
                return 0;
        $how = user_date_format();
-       $sep = $dateseps[user_date_sep()];
+       $sep = $SysPrefs->dateseps[user_date_sep()];
 
        $date_ = trim($date_);
 
        $date_ = trim($date_);
-       $date_ = str_replace($sep, "", $date_);
-       if (strlen($date_) == 6)
+       $date = str_replace($sep, "", $date_);
+       
+       if ($how > 2)
+       {
+               global $tmonths;
+               $dd = explode($sep, $date_);
+               if ($how == 3)
+               {
+                       $day = $dd[1];
+                       $month = array_search($dd[0], $tmonths);
+                       $year = $dd[2];
+               } 
+               elseif ($how == 4)
+               {
+                       $day = $dd[0];
+                       $month = array_search($dd[1], $tmonths);
+                       $year = $dd[2];
+               } 
+               else
+               {
+                       $day = $dd[2];
+                       $month = array_search($dd[1], $tmonths);
+                       $year = $dd[0];
+               }
+               if ($year < 1000)
+                       return 0;
+       }
+       elseif (strlen($date) == 6)
        {
                if ($how == 0)
                {
        {
                if ($how == 0)
                {
-                       $day = substr($date_,2,2);
-                       $month = substr($date_,0,2);
-                       $year = substr($date_,4,2);
+                       $day = substr($date,2,2);
+                       $month = substr($date,0,2);
+                       $year = substr($date,4,2);
                } 
                elseif ($how == 1)
                {
                } 
                elseif ($how == 1)
                {
-                       $day = substr($date_,0,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,4,2);
+                       $day = substr($date,0,2);
+                       $month = substr($date,2,2);
+                       $year = substr($date,4,2);
                } 
                else
                {
                } 
                else
                {
-                       $day = substr($date_,4,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,0,2);
+                       $day = substr($date,4,2);
+                       $month = substr($date,2,2);
+                       $year = substr($date,0,2);
                }
        }
                }
        }
-       elseif (strlen($date_) == 8)
+       elseif (strlen($date) == 8)
        {
                if ($how == 0)
                {
        {
                if ($how == 0)
                {
-                       $day = substr($date_,2,2);
-                       $month = substr($date_,0,2);
-                       $year = substr($date_,4,4);
+                       $day = substr($date,2,2);
+                       $month = substr($date,0,2);
+                       $year = substr($date,4,4);
                } 
                elseif ($how == 1)
                {
                } 
                elseif ($how == 1)
                {
-                       $day = substr($date_,0,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,4,4);
+                       $day = substr($date,0,2);
+                       $month = substr($date,2,2);
+                       $year = substr($date,4,4);
                } 
                else
                {
                } 
                else
                {
-                       $day = substr($date_,6,2);
-                       $month = substr($date_,4,2);
-                       $year = substr($date_,0,4);
+                       $day = substr($date,6,2);
+                       $month = substr($date,4,2);
+                       $year = substr($date,0,4);
                }
        }
        if (!isset($year)|| (int)$year > 9999) 
                }
        }
        if (!isset($year)|| (int)$year > 9999) 
@@ -97,13 +132,12 @@ function is_date($date_)
                return 0;
        }
 
                return 0;
        }
 
-
        if (is_long((int)$day) && is_long((int)$month) && is_long((int)$year))
        {
        if (is_long((int)$day) && is_long((int)$month) && is_long((int)$year))
        {
-               global $date_system;
-               if ($date_system == 1)
+               global $SysPrefs;
+               if ($SysPrefs->date_system == 1)
                        list($year, $month, $day) = jalali_to_gregorian($year, $month, $day);  
                        list($year, $month, $day) = jalali_to_gregorian($year, $month, $day);  
-               else if ($date_system == 2)     
+               elseif ($SysPrefs->date_system == 2)    
                        list($year, $month, $day) = islamic_to_gregorian($year, $month, $day);  
                if (checkdate((int)$month, (int)$day, (int)$year))
                {
                        list($year, $month, $day) = islamic_to_gregorian($year, $month, $day);  
                if (checkdate((int)$month, (int)$day, (int)$year))
                {
@@ -122,14 +156,14 @@ function is_date($date_)
 
 function Today() 
 {
 
 function Today() 
 {
-       global $date_system;
+       global $SysPrefs;
 
        $year = date("Y");
        $month = date("n");
        $day = date("j");
 
        $year = date("Y");
        $month = date("n");
        $day = date("j");
-       if ($date_system == 1)
+       if ($SysPrefs->date_system == 1)
                list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
                list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
-       else if ($date_system == 2)     
+       elseif ($SysPrefs->date_system == 2)    
                list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, $day);     
 }
                list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, $day);     
 }
@@ -141,19 +175,37 @@ function Now()
        else
                return date("H:i");
 }
        else
                return date("H:i");
 }
+//
+//     Retrieve and optionaly set default date for new document.
+//
+function new_doc_date($date=null)
+{
+       if (isset($date) && $date != '')
+               $_SESSION['_default_date'] = $date;
+
+       if (!isset($_SESSION['_default_date']) || !sticky_doc_date())
+               $_SESSION['_default_date'] = Today();
+
+       return $_SESSION['_default_date'];
+}
 
 function is_date_in_fiscalyear($date, $convert=false)
 {
        global $path_to_root;
 
 function is_date_in_fiscalyear($date, $convert=false)
 {
        global $path_to_root;
-       include_once($path_to_root . "/admin/db/company_db.inc");
+       include_once($path_to_root . "/admin/db/fiscalyears_db.inc");
 
 
-       $myrow = get_current_fiscalyear();
-       if ($myrow['closed'] == 1)
-               return 0;
        if ($convert)
                $date2 = sql2date($date);
        else
                $date2 = $date;
        if ($convert)
                $date2 = sql2date($date);
        else
                $date2 = $date;
+
+       if (is_date_closed($date2))
+               return 0;
+
+       if (user_check_access('SA_MULTIFISCALYEARS')) // allow all open years for this one
+               return is_date_in_fiscalyears($date2, false);
+
+       $myrow = get_current_fiscalyear();
        $begin = sql2date($myrow['begin']);
        $end = sql2date($myrow['end']);
        if (date1_greater_date2($begin, $date2) || date1_greater_date2($date2, $end))
        $begin = sql2date($myrow['begin']);
        $end = sql2date($myrow['end']);
        if (date1_greater_date2($begin, $date2) || date1_greater_date2($date2, $end))
@@ -163,10 +215,15 @@ function is_date_in_fiscalyear($date, $convert=false)
        return 1;
 }
 
        return 1;
 }
 
+function is_date_closed($date)
+{
+       return !date1_greater_date2($date, sql2date(get_company_pref('gl_closing_date')));
+}
+
 function begin_fiscalyear()
 {
        global $path_to_root;
 function begin_fiscalyear()
 {
        global $path_to_root;
-       include_once($path_to_root . "/admin/db/company_db.inc");
+       include_once($path_to_root . "/admin/db/fiscalyears_db.inc");
 
        $myrow = get_current_fiscalyear();
        return sql2date($myrow['begin']);
 
        $myrow = get_current_fiscalyear();
        return sql2date($myrow['begin']);
@@ -175,7 +232,7 @@ function begin_fiscalyear()
 function end_fiscalyear()
 {
        global $path_to_root;
 function end_fiscalyear()
 {
        global $path_to_root;
-       include_once($path_to_root . "/admin/db/company_db.inc");
+       include_once($path_to_root . "/admin/db/fiscalyears_db.inc");
 
        $myrow = get_current_fiscalyear();
        return sql2date($myrow['end']);
 
        $myrow = get_current_fiscalyear();
        return sql2date($myrow['end']);
@@ -183,91 +240,116 @@ function end_fiscalyear()
 
 function begin_month($date)
 {
 
 function begin_month($date)
 {
-       global $date_system;
+       global $SysPrefs;
     list($day, $month, $year) = explode_date_to_dmy($date);
     list($day, $month, $year) = explode_date_to_dmy($date);
-    if ($date_system == 1)
+    if ($SysPrefs->date_system == 1)
        list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
        list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
-    else if ($date_system == 2)        
+    elseif ($SysPrefs->date_system == 2)       
        list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, 1);
 }
 
        list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, 1);
 }
 
-function end_month($date)
+function days_in_month($month, $year)
 {
 {
-       global $date_system;
-    list($day, $month, $year) = explode_date_to_dmy($date);
-       if ($date_system == 1)
+       global $SysPrefs;
+
+       if ($SysPrefs->date_system == 1)
        {
        {
-               list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
                $days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, ((((((($year - (($year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682 ? 30 : 29));
        }
                $days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, ((((((($year - (($year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682 ? 30 : 29));
        }
-       else if ($date_system == 2)
+       elseif ($SysPrefs->date_system == 2)
        {
        {
-               list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
                $days_in_month = array(30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, (((((11 * $year) + 14) % 30) < 11) ? 30 : 29));
        }
        else // gregorian date
                $days_in_month = array(31, ((!($year % 4 ) && (($year % 100) || !($year % 400)))?29:28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
                $days_in_month = array(30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, (((((11 * $year) + 14) % 30) < 11) ? 30 : 29));
        }
        else // gregorian date
                $days_in_month = array(31, ((!($year % 4 ) && (($year % 100) || !($year % 400)))?29:28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
-       return __date($year, $month, $days_in_month[$month - 1]);
+
+       return $days_in_month[$month - 1];
+}
+
+function end_month($date)
+{
+       global $SysPrefs;
+
+    list($day, $month, $year) = explode_date_to_dmy($date);
+       if ($SysPrefs->date_system == 1)
+       {
+               list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
+       }
+       elseif ($SysPrefs->date_system == 2)
+       {
+               list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
+       }
+
+       return __date($year, $month, days_in_month($month, $year));
 }
 
 function add_days($date, $days) // accepts negative values as well
 {
 }
 
 function add_days($date, $days) // accepts negative values as well
 {
-       global $date_system;
+       global $SysPrefs;
     list($day, $month, $year) = explode_date_to_dmy($date);
     list($day, $month, $year) = explode_date_to_dmy($date);
-       $timet = Mktime(0,0,0, $month, $day + $days, $year);
-    if ($date_system == 1 || $date_system == 2)
+       $timet = mktime(0,0,0, $month, $day + $days, $year);
+    if ($SysPrefs->date_system == 1 || $SysPrefs->date_system == 2)
     {
     {
-       if ($date_system == 1)
+       if ($SysPrefs->date_system == 1)
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
-       else if ($date_system == 2)     
+       elseif ($SysPrefs->date_system == 2)    
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
-    return date(user_date_display(), $timet);
+    list($year, $month, $day) = explode("-", date("Y-m-d", $timet));
+       return __date($year, $month, $day);
 }
 
 function add_months($date, $months) // accepts negative values as well
 {
 }
 
 function add_months($date, $months) // accepts negative values as well
 {
-       global $date_system;
+       global $SysPrefs;
+
     list($day, $month, $year) = explode_date_to_dmy($date);
     list($day, $month, $year) = explode_date_to_dmy($date);
-       $timet = Mktime(0,0,0, $month + $months, $day, $year);
-    if ($date_system == 1 || $date_system == 2)
+
+       $months += $year*12+$month;
+       $month = ($months-1)%12+1;
+       $year = ($months-$month)/12;
+
+       $timet = mktime(0,0,0, $month, min($day, days_in_month($month, $year)), $year);
+
+    if ($SysPrefs->date_system == 1 || $SysPrefs->date_system == 2)
     {
     {
-       if ($date_system == 1)
+       if ($SysPrefs->date_system == 1)
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
-       else if ($date_system == 2)     
+       elseif ($SysPrefs->date_system == 2)    
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
-    return date(user_date_display(), $timet);
+    list($year, $month, $day) = explode("-", date("Y-m-d", $timet));
+       return __date($year, $month, $day);
 }
 
 function add_years($date, $years) // accepts negative values as well
 {
 }
 
 function add_years($date, $years) // accepts negative values as well
 {
-       global $date_system;
+       global $SysPrefs;
+
     list($day, $month, $year) = explode_date_to_dmy($date);
        $timet = Mktime(0,0,0, $month, $day, $year + $years);
     list($day, $month, $year) = explode_date_to_dmy($date);
        $timet = Mktime(0,0,0, $month, $day, $year + $years);
-    if ($date_system == 1 || $date_system == 2)
+    if ($SysPrefs->date_system == 1 || $SysPrefs->date_system == 2)
     {
     {
-       if ($date_system == 1)
+       if ($SysPrefs->date_system == 1)
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
                list($year, $month, $day) = gregorian_to_jalali(date("Y", $timet), date("n", $timet), date("j", $timet));
-       else if ($date_system == 2)     
+       elseif ($SysPrefs->date_system == 2)    
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
                list($year, $month, $day) = gregorian_to_islamic(date("Y", $timet), date("n", $timet), date("j", $timet));
        return __date($year, $month, $day);
     }
-    return date(user_date_display(), $timet);
+    list($year, $month, $day) = explode("-", date("Y-m-d", $timet));
+       return __date($year, $month, $day);
 }
 
 //_______________________________________________________________
 
 function sql2date($date_) 
 {
 }
 
 //_______________________________________________________________
 
 function sql2date($date_) 
 {
-       global $date_system;
+       global $SysPrefs;
 
        //for MySQL dates are in the format YYYY-mm-dd
 
        //for MySQL dates are in the format YYYY-mm-dd
-       if ($date_ == null || strlen($date_) == 0)
-               return "";
 
        if (strpos($date_, "/")) 
        { // In MySQL it could be either / or -
 
        if (strpos($date_, "/")) 
        { // In MySQL it could be either / or -
@@ -277,14 +359,16 @@ function sql2date($date_)
        {
                list($year, $month, $day) = explode("-", $date_);
        }
        {
                list($year, $month, $day) = explode("-", $date_);
        }
+       if (!isset($day)) // data format error
+               return "";
 
        if (strlen($day) > 4) 
        {  /*chop off the time stuff */
                $day = substr($day, 0, 2);
        }
 
        if (strlen($day) > 4) 
        {  /*chop off the time stuff */
                $day = substr($day, 0, 2);
        }
-       if ($date_system == 1)
+       if ($SysPrefs->date_system == 1)
                list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
                list($year, $month, $day) = gregorian_to_jalali($year, $month, $day);
-       else if ($date_system == 2)
+       elseif ($SysPrefs->date_system == 2)
                list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, $day);     
 } // end function sql2date
                list($year, $month, $day) = gregorian_to_islamic($year, $month, $day);
        return __date($year, $month, $day);     
 } // end function sql2date
@@ -292,85 +376,88 @@ function sql2date($date_)
 
 function date2sql($date_)
 {
 
 function date2sql($date_)
 {
-       global $dateseps, $date_system;
+       global $SysPrefs, $tmonths;
 /* takes a date in a the format specified in $DefaultDateFormat
 and converts to a yyyy/mm/dd format */
 
        $how = user_date_format();
 /* takes a date in a the format specified in $DefaultDateFormat
 and converts to a yyyy/mm/dd format */
 
        $how = user_date_format();
-       $sep = $dateseps[user_date_sep()];
+       $sep = $SysPrefs->dateseps[user_date_sep()];
 
 
+       $date_ = trim($date_);
        if ($date_ == null || strlen($date_) == 0)
                return "";
 
        if ($date_ == null || strlen($date_) == 0)
                return "";
 
-       $date_ = trim($date_);
-       $date_ = str_replace($sep, "", $date_);
-
-       if (strlen($date_) == 6)
-       {
-               if ($how == 0)
-               {
-                       $day = substr($date_,2,2);
-                       $month = substr($date_,0,2);
-                       $year = substr($date_,4,2);
-               } 
-               elseif ($how == 1)
-               {
-                       $day = substr($date_,0,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,4,2);
-               } 
-               else
+    $year = $month = $day = 0;
+    // Split up the date by the separator based on "how" to split it
+    if ($how == 0 || $how == 3) // MMDDYYYY or MmmDDYYYY
+        list($month, $day, $year) = explode($sep, $date_);
+    elseif ($how == 1 || $how == 4) // DDMMYYYY or DDMmYYYY
+        list($day, $month, $year) = explode($sep, $date_);
+    else // $how == 2 || $how == 5, YYYYMMDD or YYYYMmmDD
+        list($year, $month, $day) = explode($sep, $date_);
+
+       if ($year+$day+$month) {
+               if ($how > 2)
                {
                {
-                       $day = substr($date_,4,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,0,2);
+                       global $tmonths;
+                       $month = array_search($month, $tmonths);
                }
                }
-       }
-       elseif (strlen($date_) == 8)
-       {
-               if ($how == 0)
+               //to modify assumption in 2030
+               if ($SysPrefs->date_system == 0 || $SysPrefs->date_system == 3)
                {
                {
-                       $day = substr($date_,2,2);
-                       $month = substr($date_,0,2);
-                       $year = substr($date_,4,4);
-               } 
-               elseif ($how == 1)
-               {
-                       $day = substr($date_,0,2);
-                       $month = substr($date_,2,2);
-                       $year = substr($date_,4,4);
-               } 
-               else
-               {
-                       $day = substr($date_,6,2);
-                       $month = substr($date_,4,2);
-                       $year = substr($date_,0,4);
+                       if ((int)$year < 60)
+                       {
+                               $year = "20".$year;
+                       } 
+                       elseif ((int)$year > 59 && (int)$year < 100)
+                       {
+                               $year = "19".$year;
+                       }
                }
                }
-       }
-
-//to modify assumption in 2030
-       if ($date_system == 0)
-       {
-               if ((int)$year < 60)
-               {
-                       $year = "20".$year;
-               } 
-               elseif ((int)$year > 59 && (int)$year < 100)
+               if ((int)$year > 9999)
                {
                {
-                       $year = "19".$year;
+                       return 0;
                }
                }
-       }       
-       if ((int)$year > 9999)
-       {
-               return 0;
+               if ($SysPrefs->date_system == 1)
+                       list($year, $month, $day) = jalali_to_gregorian($year, $month, $day); 
+               elseif ($SysPrefs->date_system == 2)
+                       list($year, $month, $day) = islamic_to_gregorian($year, $month, $day); 
        }
        }
-       if ($date_system == 1)
-               list($year, $month, $day) = jalali_to_gregorian($year, $month, $day); 
-       else if ($date_system == 2)
-               list($year, $month, $day) = islamic_to_gregorian($year, $month, $day); 
-       return $year."-".$month."-".$day;
+       return sprintf("%04d-%02d-%02d", $year, $month, $day);
 }// end of function
 
 }// end of function
 
+/**
+ *     Compare dates in sql format.
+ *     Return +1 if sql date1>date2, -1 if date1<date2,
+ *  or 0 if dates are equal.
+ */
+function sql_date_comp($date1, $date2)
+{
+       @list($year1, $month1, $day1) = explode("-", $date1);
+       @list($year2, $month2, $day2) = explode("-", $date2);
+
+       if ($year1 != $year2) {
+               return $year1 < $year2 ? -1 : +1;
+    }
+    elseif ($month1 != $month2) {
+               return $month1 < $month2 ? -1 : +1;
+       }
+       elseif ($day1 != $day2) {
+               return $day1 < $day2 ? -1 : +1;
+       }
+       return 0;
+}
+/*
+       Compare dates in user format.
+*/
+function date_comp($date1, $date2)
+{
+       $date1 = date2sql($date1);
+       $date2 = date2sql($date2);
+
+       return sql_date_comp($date1, $date2);
+}
+
 function date1_greater_date2 ($date1, $date2) 
 {
 
 function date1_greater_date2 ($date1, $date2) 
 {
 
@@ -378,8 +465,9 @@ function date1_greater_date2 ($date1, $date2)
 
        $date1 = date2sql($date1);
        $date2 = date2sql($date2);
 
        $date1 = date2sql($date1);
        $date2 = date2sql($date2);
-       list($year1, $month1, $day1) = explode("-", $date1);
-       list($year2, $month2, $day2) = explode("-", $date2);
+
+       @list($year1, $month1, $day1) = explode("-", $date1);
+       @list($year2, $month2, $day2) = explode("-", $date2);
 
        if ($year1 > $year2)
        {
 
        if ($year1 > $year2)
        {
@@ -402,8 +490,7 @@ function date1_greater_date2 ($date1, $date2)
        return 0;
 }
 
        return 0;
 }
 
-
-function date_diff ($date1, $date2, $period) 
+function date_diff2 ($date1, $date2, $period) 
 {
 
 /* expects dates in the format specified in $DefaultDateFormat - period can be one of 'd','w','y','m'
 {
 
 /* expects dates in the format specified in $DefaultDateFormat - period can be one of 'd','w','y','m'
@@ -443,9 +530,7 @@ function explode_date_to_dmy($date_)
        $date = date2sql($date_);
        if ($date == "") 
        {
        $date = date2sql($date_);
        if ($date == "") 
        {
-               $disp = user_date_display();
-               echo "<br>Dates must be entered in the format $disp. Sent was $date_<br>";
-               exit;
+               return array(0,0,0);
        }
        list($year, $month, $day) = explode("-", $date);
        return array($day, $month, $year);
        }
        list($year, $month, $day) = explode("-", $date);
        return array($day, $month, $year);
@@ -618,4 +703,3 @@ function islamic_to_gregorian($i_y, $i_m, $i_d)
        }
        return array($y, $m, $d);
 }
        }
        return array($y, $m, $d);
 }
-?>