📄 calc.php
字号:
} // 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 = substr($year,0,2);
$year = 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -