php日期和增量的麻烦

时间:2012-10-11 12:59:19

标签: php date increment

我已经完成了增加日期的功能

以下是:

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。

1 个答案:

答案 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