📄 calc.php
字号:
<?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.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, 2000 ispi * * @access public * * @version 1.2.4 * @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 isValidDate($day, $month, $year) { if($year < 0 || $year > 9999) return false; if(!checkdate($month,$day,$year)) return false; return true; } // end func isValidDate /** * 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"); $week_year = $year - 1501; $week_day = $week_year * 365 + floor($week_year / 4) - 29872 + 1 - floor($week_year / 100) + floor(($week_year - 300) / 400); $week_number = ceil((Date_Calc::julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7); 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--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -