我的数据库中有两个用户,其出生日期设置为:
1985-01-26
然后我有功能,当提供用户的日期时,告诉生日剩下多少天。这是功能:
function retage($iy,$im,$id)
{
if(!empty($iy)>0 && intval($im)>0 && intval($id)>0)
{
$tdo=$iy.'-'.$im.'-'.$id;
$tdc=date('Y').'-'.$im.'-'.$id;
/*echo "<br/>";*/
$cd=date('Y-n-j');
/*echo "<br/>";*/
if(strtotime($tdc)>strtotime($cd))//coming
{
$ty=floor((strtotime($tdc)-strtotime($tdo))/(3600*24*365));
$td=floor((strtotime($tdc)-strtotime($cd))/(24*3600));
if($td==1)
{
$td=round((strtotime($tdc)-strtotime($cd))/(24*3600)).' day to go';
}
else
{
$td=round((strtotime($tdc)-strtotime($cd))/(24*3600)).' days to go';
}
$ty='<font color="#C7C5C5">is turning '.$ty.' on <br>'.date('M jS Y',strtotime($tdc)).'</font>';
//return 'is turning '.$ty.' on '.$tdc;
}
elseif(strtotime($tdc)<strtotime($cd))//past
{
$ty=floor((strtotime($tdc)-strtotime($tdo))/(3600*24*365));
if($ty>0)
{
//$td='gone '.floor((strtotime($cd)-strtotime($tdc))/(24*3600)).' days ago';
$ndays=floor((strtotime($cd)-strtotime($tdc))/(24*3600));
if($ndays==1)
$td=' gone '.round((strtotime($cd)-strtotime($tdc))/(24*3600)).' day ago';
else
$td=' gone '.round((strtotime($cd)-strtotime($tdc))/(24*3600)).' days ago';
$ty='<font color="#C7C5C5">had turned '.$ty.' on <br>'.date('M jS Y',strtotime($tdc)).'</font>';
//return 'had turned '.$ty.' on '.$tdc;
}
else
{
$tdc=(date('Y')+1).'-'.$im.'-'.$id;
$ty=floor((strtotime($tdc)-strtotime($tdo))/(3600*24*365));
//$td=floor((strtotime($tdc)-strtotime($cd))/(24*3600)).' days to go';
$td=floor((strtotime($tdc)-strtotime($cd))/(24*3600));
if($td==1)
{
$td=round((strtotime($tdc)-strtotime($cd))/(24*3600)).' day to go';
}
else
{
$td=round((strtotime($tdc)-strtotime($cd))/(24*3600)).' days to go';
}
$ty='<font color="#C7C5C5">is turning '.$ty.' on <br>'.date('M jS Y',strtotime($tdc)).'</font>';
//return 'is turning '.$ty.' on '.$tdc;
}
}
else//today
{
$ty=floor((strtotime($tdc)-strtotime($tdo))/(3600*24*365));
if($ty>0)
{
$td='today';
$ty='<font color="#C7C5C5">has turned <br>'.$ty.' on today </font>';
//return 'has turned '.$ty.' on today';
}
else
{
$ty='<font color="#C7C5C5">today</font>';$td='';
//return '';
}
}
}
else
{
$ty='';$td='';
//return '';
}
$ta[0]=$ty;
$ta[1]=$td ;
return $ta;
}
我使用下面的代码显示剩余的日期:
while($rs=mysql_fetch_array($result))
{
if (isset($rs['byear'],$rs['bmonth'],$rs['bdate']))
{
$tmptxt = retage($rs['byear'],$rs['bmonth'],$rs['bdate']);
echo $tmptxt[1];
}
}
奇怪的是,对于一个用户,剩余的天数正确显示,例如:
gone 120 days ago
对于具有相同出生日期的其他用户,显示如下:
Jan 1st 1970 -14755 days to go
奇怪:
当我在循环外使用相同的函数并使用日期1985-01-26
进行测试时,会显示正确的结果。
这里可能有什么问题?
答案 0 :(得分:2)
1970年1月1日是unix时间戳为0 /无效日期的结果。您确定数据库中的数据是否准确?