php中strtotime函数的坑

问题:

//根据出生年月 计算年龄
$birthday = '0000-00-00';
$age = strtotime($birthday); 
if($age === false){
    return false; 
} 
list($y1,$m1,$d1) = explode("-",date("Y-m-d",$age)); 
$now = strtotime("now"); 
list($y2,$m2,$d2) = explode("-",date("Y-m-d",$now)); 
$age = $y2 - $y1; 
if((int)($m2.$d2) < (int)($m1.$d1)) 
    $age -= 1; 

此段代码导致php warning异常
local.ERROR: A non-numeric value encountered 

原因:

$age = strtotime('0000-00-00'); 等于负数导致

strtotime — 将任何字符串的日期时间描述解析为 Unix 时间戳

此函数自 January 1 1970 00:00:00 GMT 起的秒数,也就是说strotime('1970-01-01 00:00:00')为0,当小于1970-01-01时 返回的结果为负数

注意:

PHP 5.1.0 之前,不是所有的平台都支持负的时间戳,那么日记范围就被限制为不能早于 Unix 纪元。这意味着在 1970 年 1 月 1 日之前的日期将不能用在 Windows,一些 Linux 版本,以及几个其它的操作系统中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值