summaryrefslogtreecommitdiff
path: root/includes/Date/Calc.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Date/Calc.php')
-rw-r--r--includes/Date/Calc.php1531
1 files changed, 1531 insertions, 0 deletions
diff --git a/includes/Date/Calc.php b/includes/Date/Calc.php
new file mode 100644
index 0000000..349f3a8
--- /dev/null
+++ b/includes/Date/Calc.php
@@ -0,0 +1,1531 @@
+<?php
+// The constant telling us what day starts the week. Monday (1) is the
+// international standard. Redefine this to 0 if you want weeks to
+// begin on Sunday.
+if(!defined('DATE_CALC_BEGIN_WEEKDAY')) {
+define('DATE_CALC_BEGIN_WEEKDAY', 1);
+}
+/**
+ * Date_Calc is a calendar class used to calculate and
+ * manipulate calendar dates and retrieve dates in a calendar
+ * format. It does not rely on 32-bit system date stamps, so
+ * you can display calendars and compare dates that date
+ * pre 1970 and post 2038.
+ *
+ * This source file is subject to version 2.02 of the PHP license,
+ * that is bundled with this package in the file LICENSE, and is
+ * available at through the world-wide-web at
+ * http://www.php.net/license/2_02.txt.
+ * If you did not receive a copy of the PHP license and are unable to
+ * obtain it through the world-wide-web, please send a note to
+ * license@php.net so we can mail you a copy immediately.
+ *
+ * Copyright (c) 1999, 2002, 2003 ispi
+ *
+ * @access public
+ *
+ * @version 1.2.6
+ * @author Monte Ohrt <monte@ispi.net>
+ */
+class Date_Calc
+{
+ /**
+ * Returns the current local date. NOTE: This function
+ * retrieves the local date using strftime(), which may
+ * or may not be 32-bit safe on your system.
+ *
+ * @param string the strftime() format to return the date
+ *
+ * @access public
+ *
+ * @return string the current date in specified format
+ */
+ function dateNow($format="%Y%m%d")
+ {
+ return(strftime($format,time()));
+ } // end func dateNow
+ /**
+ * Returns true for valid date, false for invalid date.
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ *
+ * @access public
+ *
+ * @return boolean true/false
+ */
+ function is_validDate($day, $month, $year)
+ {
+ if($year < 0 || $year > 9999) {
+ return false;
+ }
+ if(!checkdate($month,$day,$year)) {
+ return false;
+ }
+ return true;
+ } // end func is_validDate
+ /**
+ * Returns true for a leap year, else false
+ *
+ * @param string year in format CCYY
+ *
+ * @access public
+ *
+ * @return boolean true/false
+ */
+ function isLeapYear($year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(strlen($year) != 4) {
+ return false;
+ }
+ if(preg_match("/\D/",$year)) {
+ return false;
+ }
+ return (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0);
+ } // end func isLeapYear
+ /**
+ * Determines if given date is a future date from now.
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ *
+ * @access public
+ *
+ * @return boolean true/false
+ */
+ function isFutureDate($day,$month,$year)
+ {
+ $this_year = Date_Calc::dateNow("%Y");
+ $this_month = Date_Calc::dateNow("%m");
+ $this_day = Date_Calc::dateNow("%d");
+ if($year > $this_year) {
+ return true;
+ } elseif($year == $this_year) {
+ if($month > $this_month) {
+ return true;
+ } elseif($month == $this_month) {
+ if($day > $this_day) {
+ return true;
+ }
+ }
+ }
+ return false;
+ } // end func isFutureDate
+ /**
+ * Determines if given date is a past date from now.
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ *
+ * @access public
+ *
+ * @return boolean true/false
+ */
+ function isPastDate($day,$month,$year)
+ {
+ $this_year = Date_Calc::dateNow("%Y");
+ $this_month = Date_Calc::dateNow("%m");
+ $this_day = Date_Calc::dateNow("%d");
+ if($year < $this_year) {
+ return true;
+ } elseif($year == $this_year) {
+ if($month < $this_month) {
+ return true;
+ } elseif($month == $this_month) {
+ if($day < $this_day) {
+ return true;
+ }
+ }
+ }
+ return false;
+ } // end func isPastDate
+ /**
+ * Returns day of week for given date, 0=Sunday
+ *
+ * @param string year in format CCYY, default is current local year
+ * @param string month in format MM, default is current local month
+ * @param string day in format DD, default is current local day
+ *
+ * @access public
+ *
+ * @return int $weekday_number
+ */
+ function dayOfWeek($day="",$month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ if($month > 2) {
+ $month -= 2;
+ } else {
+ $month += 10;
+ $year--;
+ }
+ $day = ( floor((13 * $month - 1) / 5) +
+ $day + ($year % 100) +
+ floor(($year % 100) / 4) +
+ floor(($year / 100) / 4) - 2 *
+ floor($year / 100) + 77);
+ $weekday_number = (($day - 7 * floor($day / 7)));
+ return $weekday_number;
+ } // end func dayOfWeek
+ /**
+ * Returns week of the year, first Sunday is first day of first week
+ *
+ * @param string day in format DD
+ * @param string month in format MM
+ * @param string year in format CCYY
+ *
+ * @access public
+ *
+ * @return integer $week_number
+ */
+ function weekOfYear($day,$month,$year)
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $iso = Date_Calc::gregorianToISO($day, $month, $year);
+ $parts = explode('-',$iso);
+ $week_number = intval($parts[1]);
+ return $week_number;
+ } // end func weekOfYear
+ /**
+ * Returns number of days since 31 December of year before given date.
+ *
+ * @param string year in format CCYY, default is current local year
+ * @param string month in format MM, default is current local month
+ * @param string day in format DD, default is current local day
+ *
+ * @access public
+ *
+ * @return int $julian
+ */
+ function julianDate($day="",$month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = array(0,31,59,90,120,151,181,212,243,273,304,334);
+ $julian = ($days[$month - 1] + $day);
+ if($month > 2 && Date_Calc::isLeapYear($year)) {
+ $julian++;
+ }
+ return($julian);
+ } // end func julianDate
+ /**
+ * Returns quarter of the year for given date
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ *
+ * @access public
+ *
+ * @return int $year_quarter
+ */
+ function quarterOfYear($day="",$month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $year_quarter = (intval(($month - 1) / 3 + 1));
+ return $year_quarter;
+ } // end func quarterOfYear
+ /**
+ * Returns date of begin of next month of given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfNextMonth($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ if($month < 12) {
+ $month++;
+ $day=1;
+ } else {
+ $year++;
+ $month=1;
+ $day=1;
+ }
+ return Date_Calc::dateFormat($day,$month,$year,$format);
+ } // end func beginOfNextMonth
+ /**
+ * Returns date of the last day of next month of given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function endOfNextMonth($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ if($month < 12) {
+ $month++;
+ } else {
+ $year++;
+ $month=1;
+ }
+ $day = Date_Calc::daysInMonth($month,$year);
+ return Date_Calc::dateFormat($day,$month,$year,$format);
+ } // end func endOfNextMonth
+ /**
+ * Returns date of the first day of previous month of given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ if($month > 1) {
+ $month--;
+ $day=1;
+ } else {
+ $year--;
+ $month=12;
+ $day=1;
+ }
+ return Date_Calc::dateFormat($day,$month,$year,$format);
+ } // end func beginOfPrevMonth
+ /**
+ * Returns date of the last day of previous month for given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function endOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ if($month > 1) {
+ $month--;
+ } else {
+ $year--;
+ $month=12;
+ }
+ $day = Date_Calc::daysInMonth($month,$year);
+ return Date_Calc::dateFormat($day,$month,$year,$format);
+ } // end func endOfPrevMonth
+ /**
+ * Returns date of the next weekday of given date,
+ * skipping from Friday to Monday.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function nextWeekday($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ if(Date_Calc::dayOfWeek($day,$month,$year) == 5) {
+ $days += 3;
+ } elseif(Date_Calc::dayOfWeek($day,$month,$year) == 6) {
+ $days += 2;
+ } else {
+ $days += 1;
+ }
+ return(Date_Calc::daysToDate($days,$format));
+ } // end func nextWeekday
+ /**
+ * Returns date of the previous weekday,
+ * skipping from Monday to Friday.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function prevWeekday($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ if(Date_Calc::dayOfWeek($day,$month,$year) == 1) {
+ $days -= 3;
+ } elseif(Date_Calc::dayOfWeek($day,$month,$year) == 0) {
+ $days -= 2;
+ } else {
+ $days -= 1;
+ }
+ return(Date_Calc::daysToDate($days,$format));
+ } // end func prevWeekday
+ /**
+ * Returns date of the next specific day of the week
+ * from the given date.
+ *
+ * @param int day of week, 0=Sunday
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param boolean onOrAfter if true and days are same, returns current day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function nextDayOfWeek($dow,$day='',$month="",$year="",$format="%Y%m%d",$onOrAfter=false)
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);
+ if($curr_weekday == $dow) {
+ if(!$onOrAfter) {
+ $days += 7;
+ }
+ }
+ elseif($curr_weekday > $dow) {
+ $days += 7 - ( $curr_weekday - $dow );
+ } else {
+ $days += $dow - $curr_weekday;
+ }
+ return(Date_Calc::daysToDate($days,$format));
+ } // end func nextDayOfWeek
+ /**
+ * Returns date of the previous specific day of the week
+ * from the given date.
+ *
+ * @param int day of week, 0=Sunday
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param boolean onOrBefore if true and days are same, returns current day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrBefore=false)
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);
+ if($curr_weekday == $dow) {
+ if(!$onOrBefore) {
+ $days -= 7;
+ }
+ }
+ elseif($curr_weekday < $dow) {
+ $days -= 7 - ( $dow - $curr_weekday );
+ } else {
+ $days -= $curr_weekday - $dow;
+ }
+ return(Date_Calc::daysToDate($days,$format));
+ } // end func prevDayOfWeek
+ /**
+ * Returns date of the next specific day of the week
+ * on or before the given date.
+ *
+ * @param int day of week, 0=Sunday
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function nextDayOfWeekOnOrAfter($dow,$day="",$month="",$year="",$format="%Y%m%d")
+ {
+ return(Date_Calc::nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true));
+ } // end func nextDayOfWeekOnOrAfter
+ /**
+ * Returns date of the previous specific day of the week
+ * on or before the given date.
+ *
+ * @param int day of week, 0=Sunday
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function prevDayOfWeekOnOrBefore($dow,$day="",$month="",$year="",$format="%Y%m%d")
+ {
+ return(Date_Calc::prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true));
+ } // end func prevDayOfWeekOnOrAfter
+ /**
+ * Returns date of day after given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function nextDay($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ return(Date_Calc::daysToDate($days + 1,$format));
+ } // end func nextDay
+ /**
+ * Returns date of day before given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function prevDay($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $days = Date_Calc::dateToDays($day,$month,$year);
+ return(Date_Calc::daysToDate($days - 1,$format));
+ } // end func prevDay
+ /**
+ * Sets century for 2 digit year.
+ * 51-99 is 19, else 20
+ *
+ * @param string 2 digit year
+ *
+ * @access public
+ *
+ * @return string 4 digit year
+ */
+ function defaultCentury($year)
+ {
+ if(strlen($year) == 1) {
+ $year = "0$year";
+ }
+ if($year > 50) {
+ return( "19$year" );
+ } else {
+ return( "20$year" );
+ }
+ } // end func defaultCentury
+ /**
+ * Returns number of days between two given dates.
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ *
+ * @access public
+ *
+ * @return int absolute number of days between dates,
+ * -1 if there is an error.
+ */
+ function dateDiff($day1,$month1,$year1,$day2,$month2,$year2)
+ {
+ if(!Date_Calc::is_validDate($day1,$month1,$year1)) {
+ return -1;
+ }
+ if(!Date_Calc::is_validDate($day2,$month2,$year2)) {
+ return -1;
+ }
+ return(abs((Date_Calc::dateToDays($day1,$month1,$year1))
+ - (Date_Calc::dateToDays($day2,$month2,$year2))));
+ } // end func dateDiff
+ /**
+ * Compares two dates
+ *
+ * @param string $day1 day in format DD
+ * @param string $month1 month in format MM
+ * @param string $year1 year in format CCYY
+ * @param string $day2 day in format DD
+ * @param string $month2 month in format MM
+ * @param string $year2 year in format CCYY
+ *
+ * @access public
+ * @return int 0 on equality, 1 if date 1 is greater, -1 if smaller
+ */
+ function compareDates($day1,$month1,$year1,$day2,$month2,$year2)
+ {
+ $ndays1 = Date_Calc::dateToDays($day1, $month1, $year1);
+ $ndays2 = Date_Calc::dateToDays($day2, $month2, $year2);
+ if ($ndays1 == $ndays2) {
+ return 0;
+ }
+ return ($ndays1 > $ndays2) ? 1 : -1;
+ } // end func compareDates
+ /**
+ * Find the number of days in the given month.
+ *
+ * @param string month in format MM, default current local month
+ *
+ * @access public
+ *
+ * @return int number of days
+ */
+ function daysInMonth($month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if($month == 2) {
+ if(Date_Calc::isLeapYear($year)) {
+ return 29;
+ } else {
+ return 28;
+ }
+ } elseif($month == 4 or $month == 6 or $month == 9 or $month == 11) {
+ return 30;
+ } else {
+ return 31;
+ }
+ } // end func daysInMonth
+ /**
+ * Returns the number of rows on a calendar month. Useful for
+ * determining the number of rows when displaying a typical
+ * month calendar.
+ *
+ * @param string month in format MM, default current local month
+ * @param string year in format YYCC, default current local year
+ *
+ * @access public
+ *
+ * @return int number of weeks
+ */
+ function weeksInMonth($month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(DATE_CALC_BEGIN_WEEKDAY == 1) {
+ if(Date_Calc::firstOfMonthWeekday($month,$year) == 0) {
+ $first_week_days = 1;
+ } else {
+ $first_week_days =
+ 7 - (Date_Calc::firstOfMonthWeekday($month,$year) - 1);
+ }
+ } else {
+ $first_week_days = 7 - Date_Calc::firstOfMonthWeekday($month,$year);
+ }
+ return ceil(((Date_Calc::daysInMonth($month,$year) - $first_week_days) / 7) + 1);
+ } // end func weeksInMonth
+ /**
+ * Find the day of the week for the first of the month of given date.
+ *
+ * @param string year in format CCYY, default to current local year
+ * @param string month in format MM, default to current local month
+ *
+ * @access public
+ *
+ * @return int number of weekday for the first day, 0=Sunday
+ */
+ function firstOfMonthWeekday($month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ return(Date_Calc::dayOfWeek("01",$month,$year));
+ } // end func firstOfMonthWeekday
+ /**
+ * Return date of first day of month of given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfMonth($month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ return(Date_Calc::dateFormat("01",$month,$year,$format));
+ } // end of func beginOfMonth
+ /**
+ * Find the month day of the beginning of week for given date,
+ * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfWeek($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);
+ if(DATE_CALC_BEGIN_WEEKDAY == 1) {
+ if($this_weekday == 0) {
+ $beginOfWeek = Date_Calc::dateToDays($day,$month,$year) - 6;
+ } else {
+ $beginOfWeek = Date_Calc::dateToDays($day,$month,$year)
+ - $this_weekday + 1;
+ }
+ } else {
+ $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)
+ - $this_weekday);
+ }
+ /* $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)
+ - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); */
+ return(Date_Calc::daysToDate($beginOfWeek,$format));
+ } // end of func beginOfWeek
+ /**
+ * Find the month day of the end of week for given date,
+ * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday
+ * of following month.)
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function endOfWeek($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);
+ $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year)
+ + (6 - $this_weekday + DATE_CALC_BEGIN_WEEKDAY));
+ return(Date_Calc::daysToDate($last_dayOfWeek,$format));
+ } // end func endOfWeek
+ /**
+ * Find the month day of the beginning of week after given date,
+ * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfNextWeek($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day+7,$month,$year),"%Y%m%d");
+ $next_week_year = substr($date,0,4);
+ $next_week_month = substr($date,4,2);
+ $next_week_day = substr($date,6,2);
+ $this_weekday =
+ Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);
+ $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)
+ - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY));
+ return(Date_Calc::daysToDate($beginOfWeek,$format));
+ } // end func beginOfNextWeek
+ /**
+ * Find the month day of the beginning of week before given date,
+ * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function beginOfPrevWeek($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day-7,$month,$year),"%Y%m%d");
+ $next_week_year = substr($date,0,4);
+ $next_week_month = substr($date,4,2);
+ $next_week_day = substr($date,6,2);
+ $this_weekday =
+ Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);
+ $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)
+ - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY));
+ return(Date_Calc::daysToDate($beginOfWeek,$format));
+ } // end func beginOfPrevWeek
+ /**
+ * Return an array with days in week
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return array $week[$weekday]
+ */
+ function getCalendarWeek($day="",$month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $week_array = array();
+ // date for the column of week
+ $curr_day = Date_Calc::beginOfWeek($day,$month,$year,"%E");
+ for($counter=0; $counter <= 6; $counter++) {
+ $week_array[$counter] = Date_Calc::daysToDate($curr_day,$format);
+ $curr_day++;
+ }
+ return $week_array;
+ } // end func getCalendarWeek
+ /**
+ * Return a set of arrays to construct a calendar month for
+ * the given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return array $month[$row][$col]
+ */
+ function getCalendarMonth($month="",$year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ $month_array = array();
+ // date for the first row, first column of calendar month
+ if(DATE_CALC_BEGIN_WEEKDAY == 1) {
+ if(Date_Calc::firstOfMonthWeekday($month,$year) == 0) {
+ $curr_day = Date_Calc::dateToDays("01",$month,$year) - 6;
+ } else {
+ $curr_day = Date_Calc::dateToDays("01",$month,$year)
+ - Date_Calc::firstOfMonthWeekday($month,$year) + 1;
+ }
+ } else {
+ $curr_day = (Date_Calc::dateToDays("01",$month,$year)
+ - Date_Calc::firstOfMonthWeekday($month,$year));
+ }
+ // number of days in this month
+ $daysInMonth = Date_Calc::daysInMonth($month,$year);
+ $weeksInMonth = Date_Calc::weeksInMonth($month,$year);
+ for($row_counter=0; $row_counter < $weeksInMonth; $row_counter++) {
+ for($column_counter=0; $column_counter <= 6; $column_counter++) {
+ $month_array[$row_counter][$column_counter] =
+ Date_Calc::daysToDate($curr_day,$format);
+ $curr_day++;
+ }
+ }
+ return $month_array;
+ } // end func getCalendarMonth
+ /**
+ * Return a set of arrays to construct a calendar year for
+ * the given date.
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return array $year[$month][$row][$col]
+ */
+ function getCalendarYear($year="",$format="%Y%m%d")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ $year_array = array();
+ for($curr_month=0; $curr_month <=11; $curr_month++) {
+ $year_array[$curr_month] =
+ Date_Calc::getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format);
+ }
+ return $year_array;
+ } // end func getCalendarYear
+ /**
+ * Converts a date to number of days since a
+ * distant unspecified epoch.
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ *
+ * @access public
+ *
+ * @return integer number of days
+ */
+ function dateToDays($day,$month,$year)
+ {
+ $century = (int) substr($year,0,2);
+ $year = (int) substr($year,2,2);
+ if($month > 2) {
+ $month -= 3;
+ } else {
+ $month += 9;
+ if($year) {
+ $year--;
+ } else {
+ $year = 99;
+ $century --;
+ }
+ }
+ return (floor(( 146097 * $century) / 4 ) +
+ floor(( 1461 * $year) / 4 ) +
+ floor(( 153 * $month + 2) / 5 ) +
+ $day + 1721119);
+ } // end func dateToDays
+ /**
+ * Converts number of days to a distant unspecified epoch.
+ *
+ * @param int number of days
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in specified format
+ */
+ function daysToDate($days,$format="%Y%m%d")
+ {
+ $days -= 1721119;
+ $century = floor(( 4 * $days - 1) / 146097);
+ $days = floor(4 * $days - 1 - 146097 * $century);
+ $day = floor($days / 4);
+ $year = floor(( 4 * $day + 3) / 1461);
+ $day = floor(4 * $day + 3 - 1461 * $year);
+ $day = floor(($day + 4) / 4);
+ $month = floor(( 5 * $day - 3) / 153);
+ $day = floor(5 * $day - 3 - 153 * $month);
+ $day = floor(($day + 5) / 5);
+ if($month < 10) {
+ $month +=3;
+ } else {
+ $month -=9;
+ if($year++ == 99) {
+ $year = 0;
+ $century++;
+ }
+ }
+ $century = sprintf("%02d",$century);
+ $year = sprintf("%02d",$year);
+ return(Date_Calc::dateFormat($day,$month,$century.$year,$format));
+ } // end func daysToDate
+ /**
+ * Calculates the date of the Nth weekday of the month,
+ * such as the second Saturday of January 2000.
+ *
+ * @param string occurance: 1=first, 2=second, 3=third, etc.
+ * @param string dayOfWeek: 0=Sunday, 1=Monday, etc.
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function NWeekdayOfMonth($occurance,$dayOfWeek,$month,$year,$format="%Y%m%d")
+ {
+ $year = sprintf("%04d",$year);
+ $month = sprintf("%02d",$month);
+ $DOW1day = sprintf("%02d",(($occurance - 1) * 7 + 1));
+ $DOW1 = Date_Calc::dayOfWeek($DOW1day,$month,$year);
+ $wdate = ($occurance - 1) * 7 + 1 +
+ (7 + $dayOfWeek - $DOW1) % 7;
+ if( $wdate > Date_Calc::daysInMonth($month,$year)) {
+ return -1;
+ } else {
+ return(Date_Calc::dateFormat($wdate,$month,$year,$format));
+ }
+ } // end func NWeekdayOfMonth
+ /**
+ * Formats the date in the given format, much like
+ * strfmt(). This function is used to alleviate the
+ * problem with 32-bit numbers for dates pre 1970
+ * or post 2038, as strfmt() has on most systems.
+ * Most of the formatting options are compatible.
+ *
+ * formatting options:
+ *
+ * %a abbreviated weekday name (Sun, Mon, Tue)
+ * %A full weekday name (Sunday, Monday, Tuesday)
+ * %b abbreviated month name (Jan, Feb, Mar)
+ * %B full month name (January, February, March)
+ * %d day of month (range 00 to 31)
+ * %e day of month, single digit (range 0 to 31)
+ * %E number of days since unspecified epoch (integer)
+ * (%E is useful for passing a date in a URL as
+ * an integer value. Then simply use
+ * daysToDate() to convert back to a date.)
+ * %j day of year (range 001 to 366)
+ * %m month as decimal number (range 1 to 12)
+ * %n newline character (\n)
+ * %t tab character (\t)
+ * %w weekday as decimal (0 = Sunday)
+ * %U week number of current year, first sunday as first week
+ * %y year as decimal (range 00 to 99)
+ * %Y year as decimal including century (range 0000 to 9999)
+ * %% literal '%'
+ *
+ * @param string year in format CCYY
+ * @param string month in format MM
+ * @param string day in format DD
+ * @param string format for returned date
+ *
+ * @access public
+ *
+ * @return string date in given format
+ */
+ function dateFormat($day,$month,$year,$format)
+ {
+ if(!Date_Calc::is_validDate($day,$month,$year)) {
+ $year = Date_Calc::dateNow("%Y");
+ $month = Date_Calc::dateNow("%m");
+ $day = Date_Calc::dateNow("%d");
+ }
+ $output = "";
+ for($strpos = 0; $strpos < strlen($format); $strpos++) {
+ $char = substr($format,$strpos,1);
+ if($char == "%") {
+ $nextchar = substr($format,$strpos + 1,1);
+ switch($nextchar) {
+ case "a":
+ $output .= Date_Calc::getWeekdayAbbrname($day,$month,$year);
+ break;
+ case "A":
+ $output .= Date_Calc::getWeekdayFullname($day,$month,$year);
+ break;
+ case "b":
+ $output .= Date_Calc::getMonthAbbrname($month);
+ break;
+ case "B":
+ $output .= Date_Calc::getMonthFullname($month);
+ break;
+ case "d":
+ $output .= sprintf("%02d",$day);
+ break;
+ case "e":
+ $output .= $day;
+ break;
+ case "E":
+ $output .= Date_Calc::dateToDays($day,$month,$year);
+ break;
+ case "j":
+ $output .= Date_Calc::julianDate($day,$month,$year);
+ break;
+ case "m":
+ $output .= sprintf("%02d",$month);
+ break;
+ case "n":
+ $output .= "\n";
+ break;
+ case "t":
+ $output .= "\t";
+ break;
+ case "w":
+ $output .= Date_Calc::dayOfWeek($day,$month,$year);
+ break;
+ case "U":
+ $output .= Date_Calc::weekOfYear($day,$month,$year);
+ break;
+ case "y":
+ $output .= substr($year,2,2);
+ break;
+ case "Y":
+ $output .= $year;
+ break;
+ case "%":
+ $output .= "%";
+ break;
+ default:
+ $output .= $char.$nextchar;
+ }
+ $strpos++;
+ } else {
+ $output .= $char;
+ }
+ }
+ return $output;
+ } // end func dateFormat
+ /**
+ * Returns the current local year in format CCYY
+ *
+ * @access public
+ *
+ * @return string year in format CCYY
+ */
+ function getYear()
+ {
+ return Date_Calc::dateNow("%Y");
+ } // end func getYear
+ /**
+ * Returns the current local month in format MM
+ *
+ * @access public
+ *
+ * @return string month in format MM
+ */
+ function getMonth()
+ {
+ return Date_Calc::dateNow("%m");
+ } // end func getMonth
+ /**
+ * Returns the current local day in format DD
+ *
+ * @access public
+ *
+ * @return string day in format DD
+ */
+ function getDay()
+ {
+ return Date_Calc::dateNow("%d");
+ } // end func getDay
+ /**
+ * Returns the full month name for the given month
+ *
+ * @param string month in format MM
+ *
+ * @access public
+ *
+ * @return string full month name
+ */
+ function getMonthFullname($month)
+ {
+ $month = (int)$month;
+ if(empty($month)) {
+ $month = (int) Date_Calc::dateNow("%m");
+ }
+ $month_names = Date_Calc::getMonthNames();
+ return $month_names[$month];
+ // getMonthNames returns months with correct indexes
+ //return $month_names[($month - 1)];
+ } // end func getMonthFullname
+ /**
+ * Returns the abbreviated month name for the given month
+ *
+ * @param string month in format MM
+ * @param int optional length of abbreviation, default is 3
+ *
+ * @access public
+ *
+ * @return string abbreviated month name
+ * @see Date_Calc::getMonthFullname
+ */
+ function getMonthAbbrname($month,$length=3)
+ {
+ $month = (int)$month;
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ return mb_substr(Date_Calc::getMonthFullname($month), 0, $length);
+ } // end func getMonthAbbrname
+ /**
+ * Returns the full weekday name for the given date
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ *
+ * @access public
+ *
+ * @return string full month name
+ */
+ function getWeekdayFullname($day="",$month="",$year="")
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ $weekday_names = Date_Calc::getWeekDays();
+ $weekday = Date_Calc::dayOfWeek($day,$month,$year);
+ return $weekday_names[$weekday];
+ } // end func getWeekdayFullname
+ /**
+ * Returns the abbreviated weekday name for the given date
+ *
+ * @param string year in format CCYY, default current local year
+ * @param string month in format MM, default current local month
+ * @param string day in format DD, default current local day
+ * @param int optional length of abbreviation, default is 3
+ *
+ * @access public
+ *
+ * @return string full month name
+ * @see Date_Calc::getWeekdayFullname
+ */
+ function getWeekdayAbbrname($day="",$month="",$year="",$length=3)
+ {
+ if(empty($year)) {
+ $year = Date_Calc::dateNow("%Y");
+ }
+ if(empty($month)) {
+ $month = Date_Calc::dateNow("%m");
+ }
+ if(empty($day)) {
+ $day = Date_Calc::dateNow("%d");
+ }
+ return mb_substr(Date_Calc::getWeekdayFullname($day,$month,$year),0,$length);
+ } // end func getWeekdayFullname
+ /**
+ * Returns the numeric month from the month name or an abreviation
+ *
+ * Both August and Aug would return 8.
+ * Month name is case insensitive.
+ *
+ * @param string month name
+ * @return integer month number
+ */
+ function getMonthFromFullName($month)
+ {
+ $month = strtolower($month);
+ $months = Date_Calc::getMonthNames();
+ while(list($id, $name) = each($months)) {
+ if(ereg($month, strtolower($name))) {
+ return($id);
+ }
+ }
+ return(0);
+ } // end func getMonthFromFullName
+ /**
+ * Returns an array of month names
+ *
+ * Used to take advantage of the setlocale function to return
+ * language specific month names.
+ * XXX cache values to some global array to avoid preformace
+ * hits when called more than once.
+ *
+ * @returns array An array of month names
+ */
+ function getMonthNames()
+ {
+ for($i=1;$i<13;$i++) {
+ $months[$i] = strftime('%B', mktime(0, 0, 0, $i, 1, 2001));
+ }
+ return($months);
+ } // end func getMonthNames
+ /**
+ * Returns an array of week days
+ *
+ * Used to take advantage of the setlocale function to
+ * return language specific week days
+ * XXX cache values to some global array to avoid preformace
+ * hits when called more than once.
+ *
+ * @returns array An array of week day names
+ */
+ function getWeekDays()
+ {
+ for($i=0;$i<7;$i++) {
+ $weekdays[$i] = strftime('%A', mktime(0, 0, 0, 1, $i, 2001));
+ }
+ return($weekdays);
+ } // end func getWeekDays
+ /**
+ * Converts from Gregorian Year-Month-Day to ISO YearNumber-WeekNumber-WeekDay
+ *
+ * Uses ISO 8601 definitions.
+ * Algorithm from Rick McCarty, 1999 at http://personal.ecu.edu/mccartyr/ISOwdALG.txt
+ *
+ * @param int $year
+ * @param int $month
+ * @param int $day
+ * @return string
+ * @access public
+ */
+ // Transcribed to PHP by Jesus M. Castagnetto (blame him if it is fubared ;-)
+ function gregorianToISO($day, $month, $year) {
+ $mnth = array (0,31,59,90,120,151,181,212,243,273,304,334);
+ $y_isleap = Date_Calc::isLeapYear($year);
+ $y_1_isleap = Date_Calc::isLeapYear($year - 1);
+ $day_of_year_number = $day + $mnth[$month - 1];
+ if ($y_isleap && $month > 2) {
+ $day_of_year_number++;
+ }
+ // find Jan 1 weekday (monday = 1, sunday = 7)
+ $yy = ($year - 1) % 100;
+ $c = ($year - 1) - $yy;
+ $g = $yy + intval($yy/4);
+ $jan1_weekday = 1 + intval((((($c / 100) % 4) * 5) + $g) % 7);
+ // weekday for year-month-day
+ $h = $day_of_year_number + ($jan1_weekday - 1);
+ $weekday = 1 + intval(($h - 1) % 7);
+ // find if Y M D falls in YearNumber Y-1, WeekNumber 52 or
+ if ($day_of_year_number <= (8 - $jan1_weekday) && $jan1_weekday > 4){
+ $yearnumber = $year - 1;
+ if ($jan1_weekday == 5 || ($jan1_weekday == 6 && $y_1_isleap)) {
+ $weeknumber = 53;
+ } else {
+ $weeknumber = 52;
+ }
+ } else {
+ $yearnumber = $year;
+ }
+ // find if Y M D falls in YearNumber Y+1, WeekNumber 1
+ if ($yearnumber == $year) {
+ if ($y_isleap) {
+ $i = 366;
+ } else {
+ $i = 365;
+ }
+ if (($i - $day_of_year_number) < (4 - $weekday)) {
+ $yearnumber++;
+ $weeknumber = 1;
+ }
+ }
+ // find if Y M D falls in YearNumber Y, WeekNumber 1 through 53
+ if ($yearnumber == $year) {
+ $j = $day_of_year_number + (7 - $weekday) + ($jan1_weekday - 1);
+ //$weeknumber = intval($j / 7) + 1; // kludge!!! - JMC
+ $weeknumber = intval($j / 7); // kludge!!! - JMC
+ if ($jan1_weekday > 4) {
+ $weeknumber--;
+ }
+ }
+ // put it all together
+ if ($weeknumber < 10)
+ $weeknumber = '0'.$weeknumber;
+ return "{$yearnumber}-{$weeknumber}-{$weekday}";
+ }
+ /**
+ * Determines julian date of the given season
+ * Adapted from previous work in Java by James Mark Hamilton, mhamilton@qwest.net
+ *
+ * @author Robert Butler <rob@maxwellcreek.org>
+ *
+ * @param string is VERNALEQUINOX, SUMMERSOLSTICE, AUTUMNALEQUINOX, or WINTERSOLSTICE.
+ * @param string year in format CCYY, must be a calendar year between -1000BC and 3000AD.
+ *
+ * @access public
+ *
+ * @return float $juliandate
+ */
+ function dateSeason ($season, $year = '') {
+ if ($year == '') {
+ $year = Date_Calc::dateNow('%Y');
+ }
+ if (($year >= -1000) && ($year <= 1000)) {
+ $y = $year / 1000.0;
+ if ($season == "VERNALEQUINOX") {
+ $juliandate = (((((((-0.00071 * $y) - 0.00111) * $y) + 0.06134) * $y) + 365242.1374) * $y) + 1721139.29189;
+ } else if ($season == "SUMMERSOLSTICE") {
+ $juliandate = ((((((( 0.00025 * $y) + 0.00907) * $y) - 0.05323) * $y) + 365241.72562) * $y) + 1721233.25401;
+ } else if ($season == "AUTUMNALEQUINOX") {
+ $juliandate = ((((((( 0.00074 * $y) - 0.00297) * $y) - 0.11677) * $y) + 365242.49558) * $y) + 1721325.70455;
+ } else if ($season == "WINTERSOLSTICE") {
+ $juliandate = (((((((-0.00006 * $y) - 0.00933) * $y) - 0.00769) * $y) + 365242.88257) * $y) + 1721414.39987;
+ }
+ } elseif (($year > 1000) && ($year <= 3000)) {
+ $y = ($year - 2000) / 1000;
+ if ($season == "VERNALEQUINOX") {
+ $juliandate = (((((((-0.00057 * $y) - 0.00411) * $y) + 0.05169) * $y) + 365242.37404) * $y) + 2451623.80984;
+ } else if ($season == "SUMMERSOLSTICE") {
+ $juliandate = (((((((-0.0003 * $y) + 0.00888) * $y) + 0.00325) * $y) + 365241.62603) * $y) + 2451716.56767;
+ } else if ($season == "AUTUMNALEQUINOX") {
+ $juliandate = ((((((( 0.00078 * $y) + 0.00337) * $y) - 0.11575) * $y) + 365242.01767) * $y) + 2451810.21715;
+ } else if ($season == "WINTERSOLSTICE") {
+ $juliandate = ((((((( 0.00032 * $y) - 0.00823) * $y) - 0.06223) * $y) + 365242.74049) * $y) + 2451900.05952;
+ }
+ }
+ return ($juliandate);
+ } // end func dateSeason
+} // end class Date_Calc
+?> \ No newline at end of file