php时间格式是否正确,PHP计算时间日期差并检验日期格式是否正确(月龄计算)...

/**

* 校验日期格式是否正确

*

* @param string $date 日期

* @param string $formats 需要检验的格式数组

* @return boolean

*/

function checkDateIsValid($date, $formats = array("Ymd","Y-m-d", "Y/m/d")) {

$unixTime = strtotime($date);

if (!$unixTime) { //strtotime转换不对,日期格式显然不对。

return false;

}

//校验日期的有效性,只要满足其中一个格式就OK

foreach ($formats as $format) {

if (date($format, $unixTime) == $date) {

return true;

}

}

return false;

}

/**

* 计算日期时间差

*

* @param string $date_befor 日期1

* @param string $date_after 日期2

* @param string $diff_type 返回类型 YMDHIS

* @return boolean | int 相差结果 失败返回false

*/

function calcDateDiff($date_befor,$date_after,$diff_type = 'm'){

if( checkDateIsValid($date_befor) && checkDateIsValid($date_after) ){

$date_befor = strtotime($date_befor);

$date_after = strtotime($date_after);

switch(strtoupper($diff_type)){

case 'Y':

$c['B']['Y'] = date('Y',$date_befor);

$c['B']['M'] = date('m',$date_befor);

$c['B']['D'] = date('d',$date_befor);

$c['A']['Y'] = date('Y',$date_after);

$c['A']['M'] = date('m',$date_after);

$c['A']['D'] = date('d',$date_after);

$c['C']['Y'] = ($c['A']['Y'] - $c['B']['Y']) * 12;

$c['C']['M'] = ($c['A']['M'] - $c['B']['M']) * 1;

$c['C']['D'] = ($c['A']['D'] - $c['B']['D']) >= 0 ? 0 : -1 ;

return floor(($c['C']['Y'] + $c['C']['M'] + $c['C']['D'] )/12) ;

break;

case 'M':

$c['B']['Y'] = date('Y',$date_befor);

$c['B']['M'] = date('m',$date_befor);

$c['B']['D'] = date('d',$date_befor);

$c['A']['Y'] = date('Y',$date_after);

$c['A']['M'] = date('m',$date_after);

$c['A']['D'] = date('d',$date_after);

$c['C']['Y'] = ($c['A']['Y'] - $c['B']['Y']) * 12;

$c['C']['M'] = ($c['A']['M'] - $c['B']['M']) * 1;

$c['C']['D'] = ($c['A']['D'] - $c['B']['D']) >= 0 ? 0 : -1 ;

return $c['C']['Y'] + $c['C']['M'] + $c['C']['D'] ;

break;

case 'D':

return floor(($date_after - $date_befor)/86400);

break;

case 'H':

return floor(($date_after - $date_befor)/3600);

break;

case 'I':

return floor(($date_after - $date_befor)/60);

break;

case 'S':

return $date_after - $date_befor;

break;

default:

return $date_after - $date_befor;

break;

}

return true;

}

return false;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值