在循环递增变量内添加上一个日期的天数

时间:2010-12-31 00:29:32

标签: php

我正在开发一个函数,它在递增变量循环内的日期中添加了若干天。我在从上一个循环中获取日期以将该下一个30天添加到该日期时遇到问题。这似乎适用于前2个循环然后中断,我无法找出正确的代码来获取以前的日期。

这是我的代码:

$pay_cycles=5;
$period=30;

 $arr = array();
 for ($i=1;$i<=$pay_cycles;$i++) {

 //if first loop get todays date
 if($i==1){
 $due = date("Y-m-d");

 //else add to previous date
 } else {
 $time = strtotime ( '+'.$period.' day' , strtotime ( $due-1 ) ) ;
 $due = date("Y-m-d", $time); 
 }
   $arr[] = $due;
 }
 print_r($arr);

这就是打印

Array ( [0] => 2010-12-30 [1] => 2011-01-29 [2] => 2011-01-29 [3] => 2011-01-29 [4] => 2011-01-29 )

感谢您寻找

3 个答案:

答案 0 :(得分:0)

这:strtotime ( $due-1 )可能正在咬你。 $due是一个字符串,包含"2010-12-31",减去1会产生2010-1 = 2009

看看mktime()。 E.g。

$d = date("d");
$m = date("m");
$y = date("Y");

$pay_cycles = 5;
$period = 30;

for ( $i=0;$i<$pay_cycles;$i++ )
{
    $ts = mktime(0,0,0,$m,$d+$i*$period,$y);
    $datestr = date("Y-m-d",$ts);
    // stuff with $datestr
}

答案 1 :(得分:0)

也许我并不完全理解你的要求:但要获得下一个5 X 30天的时间段:

$pay_cycles=5;
$period=30;

 $arr = array();
 for ($i=1;$i<=$pay_cycles;$i++) {

 //if first loop get todays date
 if($i==1){
 $due = date("Y-m-d");

 //else add to previous date
 } else {
 $time = strtotime ( "$due +$period day" ) ;
 $due = date("Y-m-d", $time); 
 }
   $arr[] = $due;
 }
 print_r($arr);

给出:

Array
(
    [0] => 2010-12-31
    [1] => 2011-01-30
    [2] => 2011-03-01
    [3] => 2011-03-31
    [4] => 2011-04-30
)

答案 2 :(得分:0)

$pay_cycles=5;
$period=30;

 $arr = array();
 for ($i=0;$i<$pay_cycles;$i++) {
 if($i==0){
 $due = date("Y-m-d");

 //else add to previous date
 } else {

 $time = mktime(0,0,0,date("m"),date("d")+30*$i,date("Y"));
 $due = date("Y-m-d", $time); 
}
   $arr[] = $due;
 }
 print_r($arr);