我已经完成了增加日期的功能
以下是:
function periode($var, $i3, $i2)
{
if($var=='52')
{
return "+ ".$i3." week";
}
if($var=='26')
{
return "+ ".($i3+2+$i3)." week";
}
if($var=='12')
{
return "+".$i3." month";
}
if($var=='6')
{
return "+ ".($i3+$i2)." month";
}
if($var=='4')
{
return "+ ".($i3+2*$i2)." month";
}
if($var=='2')
{
return "+ ".($i3+5*$i2)." month";
}
if($var=='1')
{
return "+ ".($i2)." year";
}
}
麻烦的是当我使用那样的功能时:
if($pay_periodicity==26){$i3=0;}elseif($pay_periodicity==4){$i3=0;}elseif($pay_periodicity==6){$i3=0;}else{$i3=0;}; $i2=0;
$montant_echeance = round($montant_du / $nombre_echeances, 2);
$reste=$montant_du ;
while($i2 <= $nombre_echeances)
{
echo periode($pay_periodicity,$i3,$i2);
if ($i2 == $nombre_echeances)
{
$montant_echeance = $reste;
$reste = 0;
}
$date = date("d-m-Y",strtotime((($debut)."".periode($pay_periodicity,$i3,$i2)."")));
$chaine .= "<tr>
<td>$montant_du</td>
<td>".$date."</td>
<td>$montant_echeance</td>
<td>$reste</td></tr>";
$reste = $reste-$montant_echeance;
$i2++;
++$i3;
}
$chaine .="</table>";
print "$chaine";
}
在第25个$ i2之后,它显示日期:
01-01-1970
我真的不明白为什么我们不能增加超过25年。
非常感谢任何帮助或建议。
亲切的问候。
SP。
答案 0 :(得分:3)
您遇到了溢出问题。可存储在32位变量中的最高日期发生在2038-01-19
http://en.wikipedia.org/wiki/Year_2038_problem解释了这个问题。
修改强>
如果底层架构也是64位,一种解决方案是升级到64位版本的PHP。
来自how to have 64 bit integer on PHP?:
本机64位整数需要64位硬件和64位版本的PHP。
在32位硬件上:
$ php -r 'echo PHP_INT_MAX;'
2147483647
在64位硬件上:
$ php -r 'echo PHP_INT_MAX;'
9223372036854775807