📄 calc.php
字号:
} // 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($month,$year,$DOW1day);
$wdate = ($occurance - 1) * 7 + 1 +
(7 + $dayOfWeek - $DOW1) % 7;
if( $wdate > Date_Calc::daysInMonth($month,$year))
return -1;
else
return(Date_Calc::dateFormat($month,$year,$wdate,$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::isValidDate($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)
{
if(empty($month))
$month = 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)
{
if(empty($month))
$month = Date_Calc::dateNow("%m");
return 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 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);
}
/**
* Retunrs 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);
}
/**
* 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 class Date_calendar
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -