php 时间日期工具类
<?phpDateTimeUtils::addDate('2012-12-01',1,'y');DateTimeUtils::getWeekDay('2012/10/01','/');DateTimeUtils::isLeapYear('2012');class DateTimeUtils {/** * Checks for leap year, returns true if it is. No 2-digit year check. Also * handles julian calendar correctly. * @param integer $year year to check * @return boolean true if is leap year */public static function isLeapYear($year){$year = self::digitCheck($year);if ($year % 4 != 0)return false;if ($year % 400 == 0)return true;// if gregorian calendar (>1582), century not-divisible by 400 is not leapelse if ($year > 1582 && $year % 100 == 0 )return false;return true;}/** * Fix 2-digit years. Works for any century. * Assumes that if 2-digit is more than 30 years in future, then previous century. * @param integer $y year * @return integer change two digit year into multiple digits */protected static function digitCheck($y){if ($y < 100){$yr = (integer) date("Y");$century = (integer) ($yr /100);if ($yr%100 > 50) {$c1 = $century + 1;$c0 = $century;} else {$c1 = $century;$c0 = $century - 1;}$c1 *= 100;// if 2-digit year is less than 30 years in future, set it to this century// otherwise if more than 30 years in future, then we set 2-digit year to the prev century.if (($y + $c1) < $yr+30) $y = $y + $c1;else $y = $y + $c0*100;}return $y;}/** * Returns 4-digit representation of the year. * @param integer $y year * @return integer 4-digit representation of the year */public static function get4DigitYear($y){return self::digitCheck($y);}/** * Checks to see if the year, month, day are valid combination. * @param integer $y year * @param integer $m month * @param integer $d day * @return boolean true if valid date, semantic check only. */public static function isValidDate($y,$m,$d){return checkdate($m, $d, $y);}public static function checkDate($date, $separator = "-") { //检查日期是否合法日期$dateArr = explode ($separator, $date);if (is_numeric ( $dateArr [0] ) && is_numeric ( $dateArr [1] ) && is_numeric ( $dateArr [2] )) {return checkdate ( $dateArr [1], $dateArr [2], $dateArr [0] );}return false;}/** * Checks to see if the hour, minute and second are valid. * @param integer $h hour * @param integer $m minute * @param integer $s second * @param boolean $hs24 whether the hours should be 0 through 23 (default) or 1 through 12. * @return boolean true if valid date, semantic check only. * @since 1.0.5 */public static function isValidTime($h,$m,$s,$hs24=true){if($hs24 && ($h < 0 || $h > 23) || !$hs24 && ($h < 1 || $h > 12)) return false;if($m > 59 || $m < 0) return false;if($s > 59 || $s < 0) return false;return true;}public static function checkTime($time, $separator = ":") { //检查时间是否合法时间 $timeArr = explode ($separator, $time );if (is_numeric ( $timeArr [0] ) && is_numeric ( $timeArr [1] ) && is_numeric ( $timeArr [2] )) {if (($timeArr [0] >= 0 && $timeArr [0] <= 23) && ($timeArr [1] >= 0 && $timeArr [1] <= 59) && ($timeArr [2] >= 0 && $timeArr [2] <= 59))return true;elsereturn false;}return false;}public static function addDate($date, $int, $unit = "d") { //日期的增加$dateArr = explode ( "-", $date );$value [$unit] = $int;return date ( "Y-m-d", mktime ( 0, 0, 0, $dateArr [1] + $value ['m'], $dateArr [2] + $value ['d'], $dateArr [0] + $value ['y'] ) );}public static function addDayTimestamp($ntime, $aday) { //取当前时间后几天,天数增加单位为1$dayst = 3600 * 24;$oktime = $ntime + ($aday * $dayst);return $oktime;}public static function dateDiff($date1, $date2, $unit = "d") { //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天 switch ($unit) {case 's' :$dividend = 1;break;case 'i' :$dividend = 60;break;case 'h' :$dividend = 3600;break;case 'd' :$dividend = 86400;break;default :$dividend = 86400;}$time1 = strtotime ( $date1 );$time2 = strtotime ( $date2 );if ($time1 && $time2)return ( float ) ($time1 - $time2) / $dividend;return false;}//2011-12-06 =>public static function getWeekDay($date, $separator = "-") { //计算出给出的日期是星期几$dateArr = explode ($separator, $date);return date ( "w", mktime ( 0, 0, 0, $dateArr [1], $dateArr [2], $dateArr [0] ) );}public static function floorTime($seconds) { //让日期显示为:XX天XX年以前 $times = '';$days = floor ( ($seconds / 86400) % 30 );$hours = floor ( ($seconds / 3600) % 24 );$minutes = floor ( ($seconds / 60) % 60 );$seconds = floor ( $seconds % 60 );if ($seconds >= 1)$times .= $seconds . '秒';if ($minutes >= 1)$times = $minutes . '分钟 ' . $times;if ($hours >= 1)$times = $hours . '小时 ' . $times;if ($days >= 1)$times = $days . '天';if ($days > 30)return false;$times .= '前';return str_replace ( " ", '', $times );}public static function transDateToChs($date) {if (empty ( $date ))return '今日';$y = date ( 'Y', strtotime ( $date ) );$m = date ( 'm', strtotime ( $date ) );$d = date ( 'd', strtotime ( $date ) );return $y . '年' . $m . '月' . $d . '日';}// 08/31/2004 => 2004-08-31public static function TransDateUI($datestr, $type = 'Y-m-d') {if ($datestr == Null)return Null;$target = $datestr;$arr_date = preg_split ( "/\//", $target );$monthstr = $arr_date [0];$daystr = $arr_date [1];$yearstr = $arr_date [2];$result = date ( $type, mktime ( 0, 0, 0, $monthstr, $daystr, $yearstr ) );return $result;}// 12/20/2004 10:55 AM => 2004-12-20 10:55:00public static function TransDateTimeUI($datestr, $type = 'Y-m-d H:i:s') {if ($datestr == Null)return Null;$target = $datestr;$arr_date = preg_split ( "/\/|\s|:/", $target );$monthstr = $arr_date [0];$daystr = $arr_date [1];$yearstr = $arr_date [2];$hourstr = $arr_date [3];$minutesstr = $arr_date [4];$result = date ( $type, mktime ( $hourstr, $minutesstr, 0, $monthstr, $daystr, $yearstr ) );return $result;}// 2004-08-31 => 08/31/2004public static function TransDateDB($datestr, $type = 'm/d/Y') {if ($datestr == Null)return Null;if ($datestr == '0000-00-00')return Null;$target = $datestr;$arr_date = preg_split ( "/-/", $target );$monthstr = $arr_date [1];$daystr = $arr_date [2];$yearstr = $arr_date [0];$result = date ( $type, mktime ( 0, 0, 0, $monthstr, $daystr, $yearstr ) );return $result;}// 2004-08-31 10:55:00 => 12/20/2004 10:55 AM public static function TransDateTimeDB($datestr, $type = 'm/d/Y h:i A') {if ($datestr == Null)return Null;$target = $datestr;$arr_date = preg_split ( "/-|\s|:/", $target );$monthstr = $arr_date [1];$daystr = $arr_date [2];$yearstr = $arr_date [0];$hourstr = $arr_date [3];$minutesstr = $arr_date [4];$secondstr = $arr_date [5];$result = date ( $type, mktime ( $hourstr, $minutesstr, $secondstr, $monthstr, $daystr, $yearstr ) );return $result;}}?>?