0

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

以下是:

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。

4

1 回答 1

3

您遇到了溢出问题。可以存储在 32 位变量中的最高日期出现在 2038-01-19

http://en.wikipedia.org/wiki/Year_2038_problem解释了这个问题。

编辑:
如果底层架构也是 64 位,一种解决方案是升级到 64 位版本的 PHP。

如何在 PHP 上使用 64 位整数?
本机 64 位整数需要 64 位硬件和 64 位版本的 PHP。

在 32 位硬件上:

$ php -r 'echo PHP_INT_MAX;'
2147483647

在 64 位硬件上:

$ php -r 'echo PHP_INT_MAX;'
9223372036854775807
于 2012-10-11T13:04:16.883 回答