home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / Date / Calc.php next >
PHP Script  |  2000-12-12  |  47KB  |  1,528 lines

  1. <?php
  2.  
  3. // The constant telling us what day starts the week. Monday (1) is the
  4. // international standard. Redefine this to 0 if you want weeks to
  5. // begin on Sunday.
  6. define('DATE_CALC_BEGIN_WEEKDAY', 1);
  7.  
  8. /**
  9.  * Date_Calc is a calendar class used to calculate and
  10.  * manipulate calendar dates and retrieve dates in a calendar
  11.  * format. It does not rely on 32-bit system date stamps, so
  12.  * you can display calendars and compare dates that date
  13.  * pre 1970 and post 2038.
  14.  *
  15.  * This source file is subject to version 2.02 of the PHP license,
  16.  * that is bundled with this package in the file LICENSE, and is
  17.  * available at through the world-wide-web at
  18.  * http://www.php.net/license/2_02.txt.
  19.  * If you did not receive a copy of the PHP license and are unable to
  20.  * obtain it through the world-wide-web, please send a note to
  21.  * license@php.net so we can mail you a copy immediately.
  22.  *
  23.  * Copyright (c) 1999, 2000 ispi
  24.  *
  25.  * @access public
  26.  *
  27.  * @version 1.2.4
  28.  * @author Monte Ohrt <monte@ispi.net>
  29.  */
  30.  
  31. class Date_Calc {
  32.  
  33.     /**
  34.      * Returns the current local date. NOTE: This function
  35.      * retrieves the local date using strftime(), which may
  36.      * or may not be 32-bit safe on your system.
  37.      *
  38.      * @param string the strftime() format to return the date
  39.      *
  40.      * @access public
  41.      *
  42.      * @return string the current date in specified format
  43.      */
  44.  
  45.     function dateNow($format="%Y%m%d")
  46.     {
  47.         return(strftime($format,time()));    
  48.  
  49.     } // end func dateNow
  50.      
  51.      /**
  52.      * Returns true for valid date, false for invalid date.
  53.      *
  54.      * @param string year in format CCYY
  55.      * @param string month in format MM
  56.      * @param string day in format DD
  57.      *
  58.      * @access public
  59.      *
  60.      * @return boolean true/false
  61.      */
  62.  
  63.     function isValidDate($day, $month, $year)
  64.     {
  65.  
  66.         if(empty($year) || empty($month) || empty($day))
  67.             return false;
  68.         
  69.         // must be digits only
  70.         if(preg_match("/\D/",$year))
  71.             return false;
  72.         if(preg_match("/\D/",$month))
  73.             return false;
  74.         if(preg_match("/\D/",$day))
  75.             return false;
  76.  
  77.         if($year < 0 || $year > 9999)
  78.             return false;                        
  79.         if($month < 1 || $month > 12)
  80.             return false;
  81.         if($day < 1 || $day > 31 || $day > Date_Calc::daysInMonth($month,$year))
  82.             return false;
  83.                         
  84.         return true;
  85.  
  86.     } // end func isValidDate    
  87.         
  88.     function isLeapYear($year="")
  89.     {
  90.     
  91.         if(empty($year))
  92.             $year = Date_Calc::dateNow("%Y");
  93.  
  94.         if(strlen($year) != 4)
  95.             return false;
  96.         
  97.         if(preg_match("/\D/",$year))
  98.             return false;
  99.         
  100.         return (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0);
  101.  
  102.     } // end func isLeapYear
  103.         
  104.     /**
  105.      * Determines if given date is a future date from now.
  106.      *
  107.      * @param string year in format CCYY
  108.      * @param string month in format MM
  109.      * @param string day in format DD
  110.      *
  111.      * @access public
  112.      *
  113.      * @return boolean true/false
  114.      */
  115.  
  116.     function isFutureDate($day,$month,$year)
  117.     {
  118.         $this_year = Date_Calc::dateNow("%Y");
  119.         $this_month = Date_Calc::dateNow("%m");
  120.         $this_day = Date_Calc::dateNow("%d");
  121.         
  122.         
  123.         if($year > $this_year)
  124.             return true;
  125.         elseif($year == $this_year)
  126.             if($month > $this_month)
  127.                 return true;
  128.             elseif($month == $this_month)
  129.                 if($day > $this_day)
  130.                     return true;
  131.  
  132.         return false;
  133.  
  134.     } // end func isFutureDate
  135.     
  136.     /**
  137.      * Determines if given date is a past date from now.
  138.      *
  139.      * @param string year in format CCYY
  140.      * @param string month in format MM
  141.      * @param string day in format DD
  142.      *
  143.      * @access public
  144.      *
  145.      * @return boolean true/false
  146.      */
  147.  
  148.     function isPastDate($day,$month,$year)
  149.     {
  150.         $this_year = Date_Calc::dateNow("%Y");
  151.         $this_month = Date_Calc::dateNow("%m");
  152.         $this_day = Date_Calc::dateNow("%d");
  153.         
  154.         
  155.         if($year < $this_year)
  156.             return true;
  157.         elseif($year == $this_year)
  158.             if($month < $this_month)
  159.                 return true;
  160.             elseif($month == $this_month)
  161.                 if($day < $this_day)
  162.                     return true;
  163.  
  164.         return false;
  165.  
  166.     } // end func isPastDate
  167.  
  168.     /**
  169.      * Returns day of week for given date, 0=Sunday
  170.      *
  171.      * @param string year in format CCYY, default is current local year
  172.      * @param string month in format MM, default is current local month
  173.      * @param string day in format DD, default is current local day
  174.      *
  175.      * @access public
  176.      *
  177.      * @return int $weekday_number
  178.      */
  179.  
  180.     function dayOfWeek($day="",$month="",$year="")
  181.     {
  182.         
  183.         if(empty($year))
  184.             $year = Date_Calc::dateNow("%Y");
  185.         if(empty($month))
  186.             $month = Date_Calc::dateNow("%m");
  187.         if(empty($day))
  188.             $day = Date_Calc::dateNow("%d");
  189.         
  190.         if($month > 2)
  191.             $month -= 2;
  192.         else
  193.         {
  194.             $month += 10;
  195.             $year--;
  196.         }
  197.         
  198.         $day =     ( floor((13 * $month - 1) / 5) +
  199.                 $day + ($year % 100) +
  200.                 floor(($year % 100) / 4) +
  201.                 floor(($year / 100) / 4) - 2 *
  202.                 floor($year / 100) + 77);
  203.         
  204.         $weekday_number = (($day - 7 * floor($day / 7)));
  205.         
  206.         return $weekday_number;
  207.         
  208.     } // end func dayOfWeek
  209.     
  210.     /**
  211.      * Returns week of the year, first Sunday is first day of first week
  212.      *
  213.      * @param string year in format CCYY
  214.      * @param string month in format MM
  215.      * @param string day in format DD
  216.      *
  217.      * @access public
  218.      *
  219.      * @return integer $week_number
  220.      */
  221.  
  222.     function weekOfYear($day,$month,$year)
  223.     {
  224.         if(empty($year))
  225.             $year = Date_Calc::dateNow("%Y");
  226.         if(empty($month))
  227.             $month = Date_Calc::dateNow("%m");
  228.         if(empty($day))
  229.             $day = Date_Calc::dateNow("%d");
  230.  
  231.         $week_year = $year - 1501;
  232.         $week_day = $week_year * 365 + floor($week_year / 4) - 29872 + 1
  233.                 - floor($week_year / 100) + floor(($week_year - 300) / 400);
  234.          
  235.         $week_number =
  236.                 floor((Date_Calc::julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7);
  237.                    
  238.         return $week_number;
  239.  
  240.     } // end func weekOfYear
  241.     
  242.     /**
  243.      * Returns number of days since 31 December of year before given date.
  244.      *
  245.      * @param string year in format CCYY, default is current local year
  246.      * @param string month in format MM, default is current local month
  247.      * @param string day in format DD, default is current local day
  248.      *
  249.      * @access public
  250.      *
  251.      * @return int $julian
  252.      */
  253.  
  254.     function julianDate($day="",$month="",$year="")
  255.     {
  256.         if(empty($year))
  257.             $year = Date_Calc::dateNow("%Y");
  258.         if(empty($month))
  259.             $month = Date_Calc::dateNow("%m");
  260.         if(empty($day))
  261.             $day = Date_Calc::dateNow("%d");
  262.  
  263.         $days = array(0,31,59,90,120,151,181,212,243,273,304,334);
  264.         
  265.         $julian = ($days[$month - 1] + $day);
  266.  
  267.         if($month > 2 && Date_Calc::isLeapYear($year))
  268.             $julian++;
  269.         
  270.         return($julian);
  271.  
  272.     } // end func julianDate
  273.  
  274.     /**
  275.      * Returns quarter of the year for given date
  276.      *
  277.      * @param string year in format CCYY, default current local year
  278.      * @param string month in format MM, default current local month
  279.      * @param string day in format DD, default current local day
  280.      *
  281.      * @access public
  282.      *
  283.      * @return int $year_quarter
  284.      */
  285.  
  286.     function quarterOfYear($day="",$month="",$year="")
  287.     {
  288.         if(empty($year))
  289.             $year = Date_Calc::dateNow("%Y");
  290.         if(empty($month))
  291.             $month = Date_Calc::dateNow("%m");
  292.         if(empty($day))
  293.             $day = Date_Calc::dateNow("%d");
  294.  
  295.         $year_quarter = (intval(($month - 1) / 3 + 1));
  296.         
  297.         return $year_quarter;
  298.  
  299.     } // end func quarterOfYear
  300.  
  301.     /**
  302.      * Returns date of begin of next month of given date.
  303.      *
  304.      * @param string year in format CCYY, default current local year
  305.      * @param string month in format MM, default current local month
  306.      * @param string day in format DD, default current local day
  307.      * @param string format for returned date
  308.      *
  309.      * @access public
  310.      *
  311.      * @return string date in given format
  312.      */
  313.  
  314.     function beginOfNextMonth($day="",$month="",$year="",$format="%Y%m%d")
  315.     {
  316.         if(empty($year))
  317.             $year = Date_Calc::dateNow("%Y");
  318.         if(empty($month))
  319.             $month = Date_Calc::dateNow("%m");
  320.         if(empty($day))
  321.             $day = Date_Calc::dateNow("%d");
  322.  
  323.         if($month < 12)
  324.         {
  325.             $month++;
  326.             $day=1;
  327.         }
  328.         else
  329.         {
  330.             $year++;
  331.             $month=1;
  332.             $day=1;
  333.         }        
  334.                 
  335.         return Date_Calc::dateFormat($day,$month,$year,$format);
  336.  
  337.     } // end func beginOfNextMonth
  338.  
  339.     /**
  340.      * Returns date of the last day of next month of given date.
  341.      *
  342.      * @param string year in format CCYY, default current local year
  343.      * @param string month in format MM, default current local month
  344.      * @param string day in format DD, default current local day
  345.      * @param string format for returned date
  346.      *
  347.      * @access public
  348.      *
  349.      * @return string date in given format
  350.      */
  351.  
  352.     function endOfNextMonth($day="",$month="",$year="",$format="%Y%m%d")
  353.     {
  354.         if(empty($year))
  355.             $year = Date_Calc::dateNow("%Y");
  356.         if(empty($month))
  357.             $month = Date_Calc::dateNow("%m");
  358.         if(empty($day))
  359.             $day = Date_Calc::dateNow("%d");
  360.  
  361.         
  362.         if($month < 12)
  363.         {
  364.             $month++;
  365.         }
  366.         else
  367.         {
  368.             $year++;
  369.             $month=1;
  370.         }        
  371.  
  372.         $day = Date_Calc::daysInMonth($month,$year);
  373.  
  374.         return Date_Calc::dateFormat($day,$month,$year,$format);
  375.  
  376.     } // end func endOfNextMonth
  377.  
  378.     /**
  379.      * Returns date of the first day of previous month of given date.
  380.      *
  381.      * @param string year in format CCYY, default current local year
  382.      * @param string month in format MM, default current local month
  383.      * @param string day in format DD, default current local day
  384.      * @param string format for returned date
  385.      *
  386.      * @access public
  387.      *
  388.      * @return string date in given format
  389.      */
  390.  
  391.     function beginOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d")
  392.     {
  393.         if(empty($year))
  394.             $year = Date_Calc::dateNow("%Y");
  395.         if(empty($month))
  396.             $month = Date_Calc::dateNow("%m");
  397.         if(empty($day))
  398.             $day = Date_Calc::dateNow("%d");
  399.  
  400.         if($month > 1)
  401.         {
  402.             $month--;
  403.             $day=1;
  404.         }
  405.         else
  406.         {
  407.             $year--;
  408.             $month=12;
  409.             $day=1;
  410.         }        
  411.         
  412.         return Date_Calc::dateFormat($day,$month,$year,$format);
  413.         
  414.     } // end func beginOfPrevMonth
  415.         
  416.     /**
  417.      * Returns date of the last day of previous month for given date.
  418.      *
  419.      * @param string year in format CCYY, default current local year
  420.      * @param string month in format MM, default current local month
  421.      * @param string day in format DD, default current local day
  422.      * @param string format for returned date
  423.      *
  424.      * @access public
  425.      *
  426.      * @return string date in given format
  427.      */
  428.  
  429.     function endOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d")
  430.     {
  431.         if(empty($year))
  432.             $year = Date_Calc::dateNow("%Y");
  433.         if(empty($month))
  434.             $month = Date_Calc::dateNow("%m");
  435.         if(empty($day))
  436.             $day = Date_Calc::dateNow("%d");
  437.  
  438.         if($month > 1)
  439.         {
  440.             $month--;
  441.         }
  442.         else
  443.         {
  444.             $year--;
  445.             $month=12;
  446.         }        
  447.  
  448.         $day = Date_Calc::daysInMonth($month,$year);
  449.  
  450.         return Date_Calc::dateFormat($day,$month,$year,$format);    
  451.  
  452.     } // end func endOfPrevMonth
  453.  
  454.     /**
  455.      * Returns date of the next weekday of given date,
  456.      * skipping from Friday to Monday.
  457.      *
  458.      * @param string year in format CCYY, default current local year
  459.      * @param string month in format MM, default current local month
  460.      * @param string day in format DD, default current local day
  461.      * @param string format for returned date
  462.      *
  463.      * @access public
  464.      *
  465.      * @return string date in given format
  466.      */
  467.  
  468.     function nextWeekday($day="",$month="",$year="",$format="%Y%m%d")
  469.     {
  470.         if(empty($year))
  471.             $year = Date_Calc::dateNow("%Y");
  472.         if(empty($month))
  473.             $month = Date_Calc::dateNow("%m");
  474.         if(empty($day))
  475.             $day = Date_Calc::dateNow("%d");
  476.  
  477.         $days = Date_Calc::dateToDays($day,$month,$year);
  478.         
  479.         if(Date_Calc::dayOfWeek($day,$month,$year) == 5)
  480.             $days += 3;
  481.         elseif(Date_Calc::dayOfWeek($day,$month,$year) == 6)
  482.             $days += 2;
  483.         else
  484.             $days += 1;
  485.             
  486.         return(Date_Calc::daysToDate($days,$format));
  487.  
  488.     } // end func nextWeekday
  489.  
  490.     /**
  491.      * Returns date of the previous weekday,
  492.      * skipping from Monday to Friday.
  493.      *
  494.      * @param string year in format CCYY, default current local year
  495.      * @param string month in format MM, default current local month
  496.      * @param string day in format DD, default current local day
  497.      * @param string format for returned date
  498.      *
  499.      * @access public
  500.      *
  501.      * @return string date in given format
  502.      */
  503.  
  504.     function prevWeekday($day="",$month="",$year="",$format="%Y%m%d")
  505.     {
  506.         if(empty($year))
  507.             $year = Date_Calc::dateNow("%Y");
  508.         if(empty($month))
  509.             $month = Date_Calc::dateNow("%m");
  510.         if(empty($day))
  511.             $day = Date_Calc::dateNow("%d");
  512.  
  513.         $days = Date_Calc::dateToDays($day,$month,$year);
  514.  
  515.         if(Date_Calc::dayOfWeek($day,$month,$year) == 1)
  516.             $days -= 3;
  517.         elseif(Date_Calc::dayOfWeek($day,$month,$year) == 0)
  518.             $days -= 2;
  519.         else
  520.             $days -= 1;
  521.             
  522.         return(Date_Calc::daysToDate($days,$format));
  523.  
  524.     } // end func prevWeekday
  525.  
  526.     /**
  527.      * Returns date of the next specific day of the week
  528.      * from the given date.
  529.      *
  530.      * @param int day of week, 0=Sunday
  531.      * @param string year in format CCYY, default current local year
  532.      * @param string month in format MM, default current local month
  533.      * @param string day in format DD, default current local day
  534.      * @param boolean onOrAfter if true and days are same, returns current day
  535.      * @param string format for returned date
  536.      *
  537.      * @access public
  538.      *
  539.      * @return string date in given format
  540.      */
  541.  
  542.     function nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrAfter=false)
  543.     {
  544.         if(empty($year))
  545.             $year = Date_Calc::dateNow("%Y");
  546.         if(empty($month))
  547.             $month = Date_Calc::dateNow("%m");
  548.         if(empty($day))
  549.             $day = Date_Calc::dateNow("%d");
  550.  
  551.         $days = Date_Calc::dateToDays($day,$month,$year);
  552.         $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);
  553.         
  554.         if($curr_weekday == $dow)
  555.         {
  556.             if(!$onOrAfter)
  557.                 $days += 7;
  558.         }
  559.         elseif($curr_weekday > $dow)
  560.             $days += 7 - ( $curr_weekday - $dow );
  561.         else
  562.             $days += $dow - $curr_weekday;
  563.             
  564.         return(Date_Calc::daysToDate($days,$format));
  565.  
  566.     } // end func nextDayOfWeek
  567.  
  568.     /**
  569.      * Returns date of the previous specific day of the week
  570.      * from the given date.
  571.      *
  572.      * @param int day of week, 0=Sunday
  573.      * @param string year in format CCYY, default current local year
  574.      * @param string month in format MM, default current local month
  575.      * @param string day in format DD, default current local day
  576.      * @param boolean onOrBefore if true and days are same, returns current day
  577.      * @param string format for returned date
  578.      *
  579.      * @access public
  580.      *
  581.      * @return string date in given format
  582.      */
  583.  
  584.     function prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrBefore=false)
  585.     {
  586.         if(empty($year))
  587.             $year = Date_Calc::dateNow("%Y");
  588.         if(empty($month))
  589.             $month = Date_Calc::dateNow("%m");
  590.         if(empty($day))
  591.             $day = Date_Calc::dateNow("%d");
  592.  
  593.         $days = Date_Calc::dateToDays($day,$month,$year);
  594.         $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);
  595.         
  596.         if($curr_weekday == $dow)
  597.         {
  598.             if(!$onOrBefore)
  599.                 $days -= 7;
  600.         }
  601.         elseif($curr_weekday < $dow)
  602.             $days -= 7 - ( $dow - $curr_weekday );
  603.         else
  604.             $days -= $curr_weekday - $dow;
  605.             
  606.         return(Date_Calc::daysToDate($days,$format));
  607.  
  608.     } // end func prevDayOfWeek    
  609.  
  610.     /**
  611.      * Returns date of the next specific day of the week
  612.      * on or before the given date.
  613.      *
  614.      * @param int day of week, 0=Sunday
  615.      * @param string year in format CCYY, default current local year
  616.      * @param string month in format MM, default current local month
  617.      * @param string day in format DD, default current local day
  618.      * @param string format for returned date
  619.      *
  620.      * @access public
  621.      *
  622.      * @return string date in given format
  623.      */
  624.  
  625.     function nextDayOfWeekOnOrAfter($dow,$day="",$month="",$year="",$format="%Y%m%d")
  626.     {
  627.         return(Date_Calc::nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true));
  628.     } // end func nextDayOfWeekOnOrAfter
  629.  
  630.     /**
  631.      * Returns date of the previous specific day of the week
  632.      * on or before the given date.
  633.      *
  634.      * @param int day of week, 0=Sunday
  635.      * @param string year in format CCYY, default current local year
  636.      * @param string month in format MM, default current local month
  637.      * @param string day in format DD, default current local day
  638.      * @param string format for returned date
  639.      *
  640.      * @access public
  641.      *
  642.      * @return string date in given format
  643.      */
  644.  
  645.     function prevDayOfWeekOnOrBefore($dow,$day="",$month="",$year="",$format="%Y%m%d")
  646.     {
  647.         return(Date_Calc::prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true));
  648.  
  649.     } // end func prevDayOfWeekOnOrAfter        
  650.                 
  651.     /**
  652.      * Returns date of day after given date.
  653.      *
  654.      * @param string year in format CCYY, default current local year
  655.      * @param string month in format MM, default current local month
  656.      * @param string day in format DD, default current local day
  657.      * @param string format for returned date
  658.      *
  659.      * @access public
  660.      *
  661.      * @return string date in given format
  662.      */
  663.  
  664.     function nextDay($day="",$month="",$year="",$format="%Y%m%d")
  665.     {
  666.         if(empty($year))
  667.             $year = Date_Calc::dateNow("%Y");
  668.         if(empty($month))
  669.             $month = Date_Calc::dateNow("%m");
  670.         if(empty($day))
  671.             $day = Date_Calc::dateNow("%d");
  672.  
  673.         $days = Date_Calc::dateToDays($day,$month,$year);
  674.             
  675.         return(Date_Calc::daysToDate($days + 1,$format));
  676.  
  677.     } // end func nextDay
  678.     
  679.     /**
  680.      * Returns date of day before given date.
  681.      *
  682.      * @param string year in format CCYY, default current local year
  683.      * @param string month in format MM, default current local month
  684.      * @param string day in format DD, default current local day
  685.      * @param string format for returned date
  686.      *
  687.      * @access public
  688.      *
  689.      * @return string date in given format
  690.      */
  691.  
  692.     function prevDay($day="",$month="",$year="",$format="%Y%m%d")
  693.     {
  694.         if(empty($year))
  695.             $year = Date_Calc::dateNow("%Y");
  696.         if(empty($month))
  697.             $month = Date_Calc::dateNow("%m");
  698.         if(empty($day))
  699.             $day = Date_Calc::dateNow("%d");
  700.  
  701.         $days = Date_Calc::dateToDays($day,$month,$year);
  702.             
  703.         return(Date_Calc::daysToDate($days - 1,$format));
  704.  
  705.     } // end func prevDay
  706.  
  707.     /**
  708.      * Sets century for 2 digit year.
  709.      * 51-99 is 19, else 20
  710.      *
  711.      * @param string 2 digit year
  712.      *
  713.      * @access public
  714.      *
  715.      * @return string 4 digit year
  716.      */
  717.  
  718.     function defaultCentury($year)
  719.     {
  720.         if(strlen($year) == 1)
  721.             $year = "0$year";
  722.         if($year > 50)
  723.             return( "19$year" );
  724.         else
  725.             return( "20$year" );
  726.  
  727.     } // end func defaultCentury
  728.     
  729.     /**
  730.      * Returns number of days between two given dates.
  731.      *
  732.      * @param string year in format CCYY
  733.      * @param string month in format MM
  734.      * @param string day in format DD
  735.      * @param string year in format CCYY
  736.      * @param string month in format MM
  737.      * @param string day in format DD
  738.      *
  739.      * @access public
  740.      *
  741.      * @return int absolute number of days between dates,
  742.      *      -1 if there is an error.
  743.      */
  744.  
  745.     function dateDiff($day1,$month1,$year1,$day2,$month2,$year2)
  746.     {
  747.         if(!Date_Calc::isValidDate($day1,$month1,$year1))
  748.             return -1;
  749.         if(!Date_Calc::isValidDate($day2,$month2,$year2))
  750.             return -1;  
  751.         
  752.         return(abs((Date_Calc::dateToDays($day1,$month1,$year1))
  753.                     - (Date_Calc::dateToDays($day2,$month2,$year2))));
  754.  
  755.     } // end func dateDiff
  756.     
  757.     /**
  758.      * Find the number of days in the given month.
  759.      *
  760.      * @param string month in format MM, default current local month
  761.      *
  762.      * @access public
  763.      *
  764.      * @return int number of days
  765.      */
  766.  
  767.     function daysInMonth($month="",$year="")
  768.     {
  769.         if(empty($year))
  770.             $year = Date_Calc::dateNow("%Y");
  771.         if(empty($month))
  772.             $month = Date_Calc::dateNow("%m");
  773.  
  774.         if($month == 2)
  775.         {
  776.             if(Date_Calc::isLeapYear($year))
  777.                 return 29;
  778.             else
  779.                 return 28;
  780.         }
  781.         elseif($month == 4 or $month == 6 or $month == 9 or $month == 11)
  782.             return 30;
  783.         else
  784.             return 31;
  785.  
  786.     } // end func daysInMonth
  787.  
  788.     /**
  789.      * Returns the number of rows on a calendar month. Useful for
  790.      * determining the number of rows when displaying a typical
  791.      * month calendar.
  792.      *
  793.      * @param string month in format MM, default current local month
  794.      * @param string year in format YYCC, default current local year
  795.      *
  796.      * @access public
  797.      *
  798.      * @return int number of weeks
  799.      */
  800.  
  801.     function weeksInMonth($month="",$year="")
  802.     {
  803.         if(empty($year))
  804.             $year = Date_Calc::dateNow("%Y");
  805.         if(empty($month))
  806.             $month = Date_Calc::dateNow("%m");
  807.  
  808.     if(DATE_CALC_BEGIN_WEEKDAY == 1)
  809.     {
  810.  
  811.         if(Date_Calc::firstOfMonthWeekday($month,$year) == 0)
  812.             $first_week_days = 1;
  813.         else
  814.             $first_week_days = 7 - (Date_Calc::firstOfMonthWeekday($month,$year) - 1);
  815.  
  816.     }    
  817.     else
  818.         $first_week_days = 7 - Date_Calc::firstOfMonthWeekday($month,$year);
  819.  
  820.         return ceil(((Date_Calc::daysInMonth($month,$year) - $first_week_days) / 7) + 1);
  821.  
  822.     } // end func weeksInMonth    
  823.         
  824.     /**
  825.      * Find the day of the week for the first of the month of given date.
  826.      *
  827.      * @param string year in format CCYY, default to current local year
  828.      * @param string month in format MM, default to current local month
  829.      *
  830.      * @access public
  831.      *
  832.      * @return int number of weekday for the first day, 0=Sunday
  833.      */
  834.  
  835.     function firstOfMonthWeekday($month="",$year="")
  836.     {
  837.         if(empty($year))
  838.             $year = Date_Calc::dateNow("%Y");
  839.         if(empty($month))
  840.             $month = Date_Calc::dateNow("%m");
  841.  
  842.         return(Date_Calc::dayOfWeek("01",$month,$year));
  843.  
  844.     } // end func firstOfMonthWeekday
  845.  
  846.     /**
  847.      * Return date of first day of month of given date.
  848.      *
  849.      * @param string year in format CCYY, default current local year
  850.      * @param string month in format MM, default current local month
  851.      * @param string format for returned date
  852.      *
  853.      * @access public
  854.      *
  855.      * @return string date in given format
  856.      */
  857.  
  858.     function beginOfMonth($month="",$year="",$format="%Y%m%d")
  859.     {
  860.         if(empty($year))
  861.             $year = Date_Calc::dateNow("%Y");
  862.         if(empty($month))
  863.             $month = Date_Calc::dateNow("%m");
  864.  
  865.         return(Date_Calc::dateFormat("01",$month,$year,$format));
  866.  
  867.     } // end of func beginOfMonth
  868.     
  869.     /**
  870.      * Find the month day of the beginning of week for given date,
  871.      * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
  872.      *
  873.      * @param string year in format CCYY, default current local year
  874.      * @param string month in format MM, default current local month
  875.      * @param string day in format DD, default current local day
  876.      * @param string format for returned date
  877.      *
  878.      * @access public
  879.      *
  880.      * @return string date in given format
  881.      */
  882.  
  883.     function beginOfWeek($day="",$month="",$year="",$format="%Y%m%d")
  884.     {
  885.         if(empty($year))
  886.             $year = Date_Calc::dateNow("%Y");
  887.         if(empty($month))
  888.             $month = Date_Calc::dateNow("%m");
  889.         if(empty($day))
  890.             $day = Date_Calc::dateNow("%d");
  891.  
  892.         $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);
  893.  
  894.     if(DATE_CALC_BEGIN_WEEKDAY == 1)
  895.     {
  896.         if($this_weekday == 0)
  897.             $beginOfWeek = Date_Calc::dateToDays($day,$month,$year) - 6;
  898.         else
  899.             $beginOfWeek = Date_Calc::dateToDays($day,$month,$year)
  900.                 - $this_weekday + 1;
  901.     }
  902.     else
  903.             $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)
  904.                 - $this_weekday);
  905.         
  906.         
  907.        /*  $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)
  908.             - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); */
  909.  
  910.         return(Date_Calc::daysToDate($beginOfWeek,$format));
  911.  
  912.     } // end of func beginOfWeek
  913.  
  914.     /**
  915.      * Find the month day of the end of week for given date,
  916.      * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday
  917.      * of following month.)
  918.      *
  919.      * @param string year in format CCYY, default current local year
  920.      * @param string month in format MM, default current local month
  921.      * @param string day in format DD, default current local day
  922.      * @param string format for returned date
  923.      *
  924.      * @access public
  925.      *
  926.      * @return string date in given format
  927.      */
  928.  
  929.     function endOfWeek($day="",$month="",$year="",$format="%Y%m%d")
  930.     {
  931.         if(empty($year))
  932.             $year = Date_Calc::dateNow("%Y");
  933.         if(empty($month))
  934.             $month = Date_Calc::dateNow("%m");
  935.         if(empty($day))
  936.             $day = Date_Calc::dateNow("%d");
  937.  
  938.         $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);
  939.  
  940.         $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year)
  941.             + (6 - $this_weekday + DATE_CALC_BEGIN_WEEKDAY));
  942.  
  943.         return(Date_Calc::daysToDate($last_dayOfWeek,$format));
  944.  
  945.     } // end func endOfWeek
  946.     
  947.     /**
  948.      * Find the month day of the beginning of week after given date,
  949.      * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
  950.      *
  951.      * @param string year in format CCYY, default current local year
  952.      * @param string month in format MM, default current local month
  953.      * @param string day in format DD, default current local day
  954.      * @param string format for returned date
  955.      *
  956.      * @access public
  957.      *
  958.      * @return string date in given format
  959.      */
  960.  
  961.     function beginOfNextWeek($day="",$month="",$year="",$format="%Y%m%d")
  962.     {
  963.         if(empty($year))
  964.             $year = Date_Calc::dateNow("%Y");
  965.         if(empty($month))
  966.             $month = Date_Calc::dateNow("%m");
  967.         if(empty($day))
  968.             $day = Date_Calc::dateNow("%d");
  969.  
  970.         $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day+7,$month,$year),"%Y%m%d");
  971.  
  972.         $next_week_year = substr($date,0,4);
  973.         $next_week_month = substr($date,4,2);
  974.         $next_week_day = substr($date,6,2);
  975.         
  976.         $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);
  977.  
  978.         $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)
  979.             - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY));
  980.  
  981.         return(Date_Calc::daysToDate($beginOfWeek,$format));
  982.  
  983.     } // end func beginOfNextWeek
  984.  
  985.     /**
  986.      * Find the month day of the beginning of week before given date,
  987.      * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
  988.      *
  989.      * @param string year in format CCYY, default current local year
  990.      * @param string month in format MM, default current local month
  991.      * @param string day in format DD, default current local day
  992.      * @param string format for returned date
  993.      *
  994.      * @access public
  995.      *
  996.      * @return string date in given format
  997.      */
  998.  
  999.     function beginOfPrevWeek($day="",$month="",$year="",$format="%Y%m%d")
  1000.     {
  1001.         if(empty($year))
  1002.             $year = Date_Calc::dateNow("%Y");
  1003.         if(empty($month))
  1004.             $month = Date_Calc::dateNow("%m");
  1005.         if(empty($day))
  1006.             $day = Date_Calc::dateNow("%d");
  1007.  
  1008.         $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day-7,$month,$year),"%Y%m%d");
  1009.  
  1010.         $next_week_year = substr($date,0,4);
  1011.         $next_week_month = substr($date,4,2);
  1012.         $next_week_day = substr($date,6,2);
  1013.  
  1014.         $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);
  1015.  
  1016.         $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)
  1017.             - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY));
  1018.  
  1019.         return(Date_Calc::daysToDate($beginOfWeek,$format));
  1020.  
  1021.     } // end func beginOfPrevWeek
  1022.  
  1023.     /**
  1024.      * Return an array with days in week
  1025.      *
  1026.      * @param string year in format CCYY, default current local year
  1027.      * @param string month in format MM, default current local month
  1028.      * @param string day in format DD, default current local day
  1029.      * @param string format for returned date
  1030.      *
  1031.      * @access public
  1032.      *
  1033.      * @return array $week[$weekday]
  1034.      */
  1035.  
  1036.     function getCalendarWeek($day="",$month="",$year="",$format="%Y%m%d")
  1037.     {
  1038.         if(empty($year))
  1039.             $year = Date_Calc::dateNow("%Y");
  1040.         if(empty($month))
  1041.             $month = Date_Calc::dateNow("%m");
  1042.         if(empty($day))
  1043.             $day = Date_Calc::dateNow("%d");
  1044.  
  1045.         $week_array = array();
  1046.  
  1047.         // date for the column of week
  1048.     
  1049.         $curr_day = Date_Calc::beginOfWeek($day,$month,$year,"%E");
  1050.  
  1051.             for($counter=0; $counter <= 6; $counter++)
  1052.             {
  1053.                 $week_array[$counter] = Date_Calc::daysToDate($curr_day,$format);
  1054.                 $curr_day++;
  1055.             }
  1056.         
  1057.         return $week_array;
  1058.     
  1059.     } // end func getCalendarWeek
  1060.  
  1061.     /**
  1062.      * Return a set of arrays to construct a calendar month for
  1063.      * the given date.
  1064.      *
  1065.      * @param string year in format CCYY, default current local year
  1066.      * @param string month in format MM, default current local month
  1067.      * @param string format for returned date
  1068.      *
  1069.      * @access public
  1070.      *
  1071.      * @return array $month[$row][$col]
  1072.      */
  1073.  
  1074.     function getCalendarMonth($month="",$year="",$format="%Y%m%d")
  1075.     {
  1076.         if(empty($year))
  1077.             $year = Date_Calc::dateNow("%Y");
  1078.         if(empty($month))
  1079.             $month = Date_Calc::dateNow("%m");
  1080.  
  1081.         $month_array = array();
  1082.         
  1083.         // date for the first row, first column of calendar month
  1084.     if(DATE_CALC_BEGIN_WEEKDAY == 1)
  1085.     {
  1086.         if(Date_Calc::firstOfMonthWeekday($month,$year) == 0)
  1087.             $curr_day = Date_Calc::dateToDays("01",$month,$year) - 6;
  1088.         else
  1089.             $curr_day = Date_Calc::dateToDays("01",$month,$year)
  1090.                 - Date_Calc::firstOfMonthWeekday($month,$year) + 1;
  1091.     }
  1092.     else
  1093.             $curr_day = (Date_Calc::dateToDays("01",$month,$year)
  1094.                 - Date_Calc::firstOfMonthWeekday($month,$year));
  1095.         
  1096.         // number of days in this month
  1097.         $daysInMonth = Date_Calc::daysInMonth($month,$year);
  1098.         
  1099.         $weeksInMonth = Date_Calc::weeksInMonth($month,$year);
  1100.         for($row_counter=0; $row_counter < $weeksInMonth; $row_counter++)
  1101.         {
  1102.             for($column_counter=0; $column_counter <= 6; $column_counter++)
  1103.             {
  1104.                 $month_array[$row_counter][$column_counter] = Date_Calc::daysToDate($curr_day,$format);
  1105.                 $curr_day++;
  1106.             }
  1107.         }
  1108.         
  1109.         return $month_array;
  1110.     
  1111.     } // end func getCalendarMonth
  1112.    
  1113.     /**
  1114.      * Return a set of arrays to construct a calendar year for
  1115.      * the given date.
  1116.      *
  1117.      * @param string year in format CCYY, default current local year
  1118.      * @param string format for returned date
  1119.      *
  1120.      * @access public
  1121.      *
  1122.      * @return array $year[$month][$row][$col]
  1123.      */
  1124.  
  1125.     function getCalendarYear($year="",$format="%Y%m%d")
  1126.     {
  1127.         if(empty($year))
  1128.             $year = Date_Calc::dateNow("%Y");
  1129.  
  1130.         $year_array = array();
  1131.  
  1132.         for($curr_month=0; $curr_month <=11; $curr_month++)
  1133.             $year_array[$curr_month] = Date_Calc::getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format);
  1134.         
  1135.         return $year_array;
  1136.     
  1137.     } // end func getCalendarYear
  1138.     
  1139.     /**
  1140.      * Converts a date to number of days since a
  1141.      * distant unspecified epoch.
  1142.      *
  1143.      * @param string year in format CCYY
  1144.      * @param string month in format MM
  1145.      * @param string day in format DD
  1146.      *
  1147.      * @access public
  1148.      *
  1149.      * @return integer number of days
  1150.      */
  1151.  
  1152.     function dateToDays($day,$month,$year)
  1153.     {
  1154.  
  1155.         $century = substr($year,0,2);
  1156.         $year = substr($year,2,2);
  1157.  
  1158.         if($month > 2)
  1159.             $month -= 3;
  1160.         else
  1161.         {
  1162.             $month += 9;
  1163.             if($year)
  1164.                 $year--;
  1165.             else
  1166.             {
  1167.                 $year = 99;
  1168.                 $century --;
  1169.             }
  1170.         }
  1171.         
  1172.         return ( floor((  146097 * $century)    /  4 ) +
  1173.                 floor(( 1461 * $year)        /  4 ) +
  1174.                 floor(( 153 * $month +  2) /  5 ) +
  1175.                     $day +  1721119);
  1176.  
  1177.     } // end func dateToDays
  1178.     
  1179.     /**
  1180.      * Converts number of days to a distant unspecified epoch.
  1181.      *
  1182.      * @param int number of days
  1183.      * @param string format for returned date
  1184.      *
  1185.      * @access public
  1186.      *
  1187.      * @return string date in specified format
  1188.      */
  1189.  
  1190.     function daysToDate($days,$format="%Y%m%d")
  1191.     {
  1192.  
  1193.         $days         -=     1721119;
  1194.         $century     =    floor(( 4 * $days -  1) /  146097);
  1195.         $days        =    floor(4 * $days - 1 - 146097 * $century);
  1196.         $day        =    floor($days /  4);
  1197.         
  1198.         $year        =    floor(( 4 * $day +  3) /  1461);
  1199.         $day        =    floor(4 * $day +  3 -  1461 * $year);
  1200.         $day        =    floor(($day +  4) /  4);
  1201.         
  1202.         $month        =    floor(( 5 * $day -  3) /  153);
  1203.         $day        =    floor(5 * $day -  3 -  153 * $month);
  1204.         $day        =    floor(($day +  5) /  5);
  1205.         
  1206.         if($month < 10)
  1207.             $month +=3;
  1208.         else
  1209.         {
  1210.             $month -=9;
  1211.             if($year++ == 99)
  1212.             {
  1213.                 $year = 0;
  1214.                 $century++;
  1215.             }
  1216.         }
  1217.         
  1218.         $century = sprintf("%02d",$century);
  1219.         $year = sprintf("%02d",$year);
  1220.         
  1221.         return(Date_Calc::dateFormat($day,$month,$century.$year,$format));
  1222.  
  1223.     } // end func daysToDate
  1224.     
  1225.     /**
  1226.      * Calculates the date of the Nth weekday of the month,
  1227.      * such as the second Saturday of January 2000.
  1228.      *
  1229.      * @param string occurance: 1=first, 2=second, 3=third, etc.
  1230.      * @param string dayOfWeek: 0=Sunday, 1=Monday, etc.
  1231.      * @param string year in format CCYY
  1232.      * @param string month in format MM
  1233.      * @param string format for returned date
  1234.      *
  1235.      * @access public
  1236.      *
  1237.      * @return string date in given format
  1238.      */
  1239.  
  1240.     function NWeekdayOfMonth($occurance,$dayOfWeek,$month,$year,$format="%Y%m%d")    {
  1241.         
  1242.         $year = sprintf("%04d",$year);
  1243.         $month = sprintf("%02d",$month);
  1244.         
  1245.         $DOW1day = sprintf("%02d",(($occurance - 1) * 7 + 1));        
  1246.         $DOW1 = Date_Calc::dayOfWeek($month,$year,$DOW1day);
  1247.         
  1248.         $wdate = ($occurance - 1) * 7 + 1 +
  1249.                 (7 + $dayOfWeek - $DOW1) % 7;
  1250.         
  1251.         if( $wdate > Date_Calc::daysInMonth($month,$year))
  1252.                 return -1;
  1253.         else
  1254.                 return(Date_Calc::dateFormat($month,$year,$wdate,$format));
  1255.         
  1256.     } // end func NWeekdayOfMonth
  1257.  
  1258.     /**
  1259.      *  Formats the date in the given format, much like
  1260.      *  strfmt(). This function is used to alleviate the
  1261.      *  problem with 32-bit numbers for dates pre 1970
  1262.      *  or post 2038, as strfmt() has on most systems.
  1263.      *  Most of the formatting options are compatible.
  1264.      *
  1265.      *  formatting options:
  1266.      *
  1267.      *  %a        abbreviated weekday name (Sun, Mon, Tue)
  1268.      *  %A        full weekday name (Sunday, Monday, Tuesday)
  1269.      *  %b        abbreviated month name (Jan, Feb, Mar)
  1270.      *  %B        full month name (January, February, March)
  1271.      *  %d        day of month (range 00 to 31)
  1272.      *  %e        day of month, single digit (range 0 to 31)
  1273.      *  %E        number of days since unspecified epoch (integer)
  1274.      *             (%E is useful for passing a date in a URL as
  1275.      *             an integer value. Then simply use
  1276.      *             daysToDate() to convert back to a date.)
  1277.      *  %j        day of year (range 001 to 366)
  1278.      *  %m        month as decimal number (range 1 to 12)
  1279.      *  %n        newline character (\n)
  1280.      *  %t        tab character (\t)
  1281.      *  %w        weekday as decimal (0 = Sunday)
  1282.      *  %U        week number of current year, first sunday as first week
  1283.      *  %y        year as decimal (range 00 to 99)
  1284.      *  %Y        year as decimal including century (range 0000 to 9999)
  1285.      *  %%        literal '%'
  1286.      *
  1287.      * @param string year in format CCYY
  1288.      * @param string month in format MM
  1289.      * @param string day in format DD
  1290.      * @param string format for returned date
  1291.      *
  1292.      * @access public
  1293.      *
  1294.      * @return string date in given format
  1295.      */
  1296.  
  1297.     function dateFormat($day,$month,$year,$format)
  1298.     {
  1299.         if(!Date_Calc::isValidDate($day,$month,$year))
  1300.         {
  1301.             $year = Date_Calc::dateNow("%Y");
  1302.             $month = Date_Calc::dateNow("%m");
  1303.             $day = Date_Calc::dateNow("%d");
  1304.         }
  1305.  
  1306.         $output = "";
  1307.         
  1308.         for($strpos = 0; $strpos < strlen($format); $strpos++)
  1309.         {
  1310.             $char = substr($format,$strpos,1);
  1311.             if($char == "%")
  1312.             {
  1313.                 $nextchar = substr($format,$strpos + 1,1);
  1314.                 switch($nextchar)
  1315.                 {
  1316.                     case "a":
  1317.                         $output .= Date_Calc::getWeekdayAbbrname($day,$month,$year);
  1318.                         break;
  1319.                     case "A":
  1320.                         $output .= Date_Calc::getWeekdayFullname($day,$month,$year);
  1321.                         break;
  1322.                     case "b":
  1323.                         $output .= Date_Calc::getMonthAbbrname($month);
  1324.                         break;
  1325.                     case "B":
  1326.                         $output .= Date_Calc::getMonthFullname($month);
  1327.                         break;
  1328.                     case "d":
  1329.                         $output .= sprintf("%02d",$day);
  1330.                         break;
  1331.                     case "e":
  1332.                         $output .= $day;
  1333.                         break;
  1334.                     case "E":
  1335.                         $output .= Date_Calc::dateToDays($day,$month,$year);
  1336.                         break;
  1337.                     case "j":
  1338.                         $output .= Date_Calc::julianDate($day,$month,$year);
  1339.                         break;
  1340.                     case "m":
  1341.                         $output .= sprintf("%02d",$month);
  1342.                         break;
  1343.                     case "n":
  1344.                         $output .= "\n";
  1345.                         break;
  1346.                     case "t":
  1347.                         $output .= "\t";
  1348.                         break;
  1349.                     case "w":
  1350.                         $output .= Date_Calc::dayOfWeek($day,$month,$year);
  1351.                         break;
  1352.                     case "U":
  1353.                         $output .= Date_Calc::weekOfYear($day,$month,$year);
  1354.                         break;
  1355.                     case "y":
  1356.                         $output .= substr($year,2,2);
  1357.                         break;
  1358.                     case "Y":
  1359.                         $output .= $year;
  1360.                         break;
  1361.                     case "%":
  1362.                         $output .= "%";
  1363.                         break;
  1364.                     default:
  1365.                         $output .= $char.$nextchar;
  1366.                 }                    
  1367.                 $strpos++;
  1368.             }
  1369.             else
  1370.             {
  1371.                 $output .= $char;
  1372.             }
  1373.         }
  1374.         return $output;
  1375.     
  1376.     } // end func dateFormat
  1377.  
  1378.     /**
  1379.      * Returns the current local year in format CCYY
  1380.      *
  1381.      * @access public
  1382.      *
  1383.      * @return string year in format CCYY
  1384.      */
  1385.     
  1386.     function getYear()
  1387.     {
  1388.         return Date_Calc::dateNow("%Y");        
  1389.  
  1390.     } // end func getYear
  1391.  
  1392.     /**
  1393.      * Returns the current local month in format MM
  1394.      *
  1395.      * @access public
  1396.      *
  1397.      * @return string month in format MM
  1398.      */    
  1399.         
  1400.     function getMonth()
  1401.     {
  1402.         return Date_Calc::dateNow("%m");        
  1403.  
  1404.     } // end func getMonth
  1405.  
  1406.     /**
  1407.      * Returns the current local day in format DD
  1408.      *
  1409.      * @access public
  1410.      *
  1411.      * @return string day in format DD
  1412.      */    
  1413.     
  1414.     function getDay()
  1415.     {
  1416.         return Date_Calc::dateNow("%d");        
  1417.  
  1418.     } // end func getDay
  1419.  
  1420.     /**
  1421.      * Returns the full month name for the given month
  1422.      *
  1423.      * @param string month in format MM
  1424.      *
  1425.      * @access public
  1426.      *
  1427.      * @return string full month name
  1428.      */    
  1429.     
  1430.     function getMonthFullname($month)
  1431.     {
  1432.         if(empty($month))
  1433.             $month = Date_Calc::dateNow("%m");
  1434.  
  1435.         $month_names = array("January","February","March","April","May","June",
  1436.                     "July","August","September","October","November","December");    
  1437.                     
  1438.         return $month_names[($month - 1)];
  1439.  
  1440.     } // end func getMonthFullname
  1441.  
  1442.     /**
  1443.      * Returns the abbreviated month name for the given month
  1444.      *
  1445.      * @param string month in format MM
  1446.      * @param int optional length of abbreviation, default is 3
  1447.      *
  1448.      * @access public
  1449.      *
  1450.      * @return string abbreviated month name
  1451.      */
  1452.         
  1453.     function getMonthAbbrname($month,$length=3)
  1454.     {
  1455.         if(empty($month))
  1456.             $month = Date_Calc::dateNow("%m");
  1457.  
  1458.         $month_names = array("January","February","March","April","May","June",
  1459.                     "July","August","September","October","November","December");    
  1460.                     
  1461.         return substr($month_names[($month - 1)],0,$length);
  1462.         
  1463.     } // end func getMonthAbbrname
  1464.  
  1465.     /**
  1466.      * Returns the full weekday name for the given date
  1467.      *
  1468.      * @param string year in format CCYY, default current local year
  1469.      * @param string month in format MM, default current local month
  1470.      * @param string day in format DD, default current local day
  1471.      *
  1472.      * @access public
  1473.      *
  1474.      * @return string full month name
  1475.      */    
  1476.     
  1477.     function getWeekdayFullname($day="",$month="",$year="")
  1478.     {
  1479.         if(empty($year))
  1480.             $year = Date_Calc::dateNow("%Y");
  1481.         if(empty($month))
  1482.             $month = Date_Calc::dateNow("%m");
  1483.         if(empty($day))
  1484.             $day = Date_Calc::dateNow("%d");
  1485.  
  1486.         $weekday_names = array("Sunday","Monday","Tuesday",
  1487.                 "Wednesday","Thursday","Friday","Saturday");    
  1488.         $weekday = Date_Calc::dayOfWeek($day,$month,$year);
  1489.                             
  1490.         return $weekday_names[$weekday];
  1491.  
  1492.     } // end func getWeekdayFullname
  1493.  
  1494.     /**
  1495.      * Returns the abbreviated weekday name for the given date
  1496.      *
  1497.      * @param string year in format CCYY, default current local year
  1498.      * @param string month in format MM, default current local month
  1499.      * @param string day in format DD, default current local day
  1500.      * @param int optional length of abbreviation, default is 3
  1501.      *
  1502.      * @access public
  1503.      *
  1504.      * @return string full month name
  1505.      */
  1506.  
  1507.     function getWeekdayAbbrname($day="",$month="",$year="",$length=3)
  1508.     {
  1509.         if(empty($year))
  1510.             $year = Date_Calc::dateNow("%Y");
  1511.         if(empty($month))
  1512.             $month = Date_Calc::dateNow("%m");
  1513.         if(empty($day))
  1514.             $day = Date_Calc::dateNow("%d");
  1515.     
  1516.         $weekday_names = array("Sunday","Monday","Tuesday",
  1517.                 "Wednesday","Thursday","Friday","Saturday");    
  1518.  
  1519.         $weekday = Date_Calc::dayOfWeek($day,$month,$year);
  1520.                             
  1521.         return substr($weekday_names[$weekday],0,$length);
  1522.  
  1523.     } // end func getWeekdayFullname
  1524.     
  1525. } // end class Date_calendar
  1526.  
  1527. ?>
  1528.