У меня есть два пользователя в моей базе данных, чья дата рождения устанавливаются на:PHP: Странная проблема Даты
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
, правильный результат показан.
Примечание: Вы можете проверить функцию самостоятельно.
Не могли бы вы рассказать, что может быть неправильным там, ваша помощь будет высоко оценена.
Спасибо.
FFS, используйте имена переменных, которые на самом деле что-то означают. Неудивительно, что вы застряли. –