我正在开发一个函数,它在递增变量循环内的日期中添加了若干天。我在从上一个循环中获取日期以将该下一个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 )
感谢您寻找
答案 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);