制作php时间日期代码,php时间日期工具类的实现代码

/**

* 功能:php时间与日期工具类

* 编辑:bbs.it-home.org

*/

DateTimeUtils::addDate('2013-12-01',1,'y');

DateTimeUtils::getWeekDay('2013/10/01','/');

DateTimeUtils::isLeapYear('2013');

DateTimeUtils::timeFromNow(strtotime("2013-10-26 14:15:13"));

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 leap

else 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);

return self::isValidDate ($dateArr[0], $dateArr[1], $dateArr[2]);

}

/**

* 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);

return self::isValidTime($timeArr[0], $timeArr[1],$timeArr[2]);

}

public static function addDate($date, $int, $unit = "d") { //日期的增加

$value = array('y'=>'', 'm'=>'', 'd'=>'');

$dateArr = explode ( "-", $date);

if(array_key_exists($unit, $value)){

$value[$unit] = $int;

}else{

return false;

}

return date ("Y-m-d", mktime (0, 0, 0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] +$value['y']));

}

public static function addDateTime($date, $int, $unit = "d") { //日期的增加

$value = array('y'=>'', 'm'=>'', 'd'=>'', 'h'=>'', 'i'=>'');

$dateArr = preg_split ( "/-|\s|:/", $date);

if(array_key_exists($unit, $value)){

$value[$unit] = $int;

}else{

return false;

}

return date ("Y-m-d H:i:s", mktime($dateArr[3]+ $value['h'], $dateArr[4]+ $value['i'], $dateArr[5], $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($begin, $end, $unit = "d") { //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天

$diff = strtotime($end) - strtotime($begin);

switch($unit)

{

case "y": $retval = bcdiv($diff, (60 * 60 * 24 * 365)); break;

case "m": $retval = bcdiv($diff, (60 * 60 * 24 * 30)); break;

case "w": $retval = bcdiv($diff, (60 * 60 * 24 * 7)); break;

case "d": $retval = bcdiv($diff, (60 * 60 * 24)); break;

case "h": $retval = bcdiv($diff, (60 * 60)); break;

case "i": $retval = bcdiv($diff, 60); break;

case "s": $retval = $diff; break;

}

return $retval;

}

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 timeFromNow($dateline) { //让日期显示为:XX天XX年以前

if(empty($dateline)) return false;

$seconds = time() - $dateline;

if($seconds < 60){

return "1分钟前";

}elseif($seconds < 3600){

return floor($seconds/60)."分钟前";

}elseif($seconds < 24*3600){

return floor($seconds/3600)."小时前";

}elseif($seconds < 48*3600){

return date("昨天 H:i", $dateline)."";

}else{

return date('Y-m-d', $dateline);

}

}

public static function transDateToChs($date) {

if (empty ($date)) return '今日';

date_default_timezone_set('PRC');

$dates = date ('Y年m月d日', strtotime ($date));

return $dates;

}

// 08/31/2004 => 2004-08-31

public 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:00

public 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;

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值