对于第一次运行,我需要使用上一次MySQL date $row_recent[0]之前6个月的日期。对于1之后的所有运行,我使用一个前一个变量来存储前一个日期,然后将日期减少6个月。我已经确认,第一次如果测试产生预期的结果。(MySQL日期-6个月)。但是,由于$startdate6m未初始化,第二个if测试将$previous_6m输出为$previous_6m默认值。知道它为什么不认识$previous_6m = $initial6m吗
<?php
$run_number = 0;
while ($run_number < 15) {
$run_number++;
if($run_number == 1){
if ($month <= 06){
$year6m = date("Y", strtotime($row_recent[0]))-1;
$month6m = str_pad((12-(6-date("m", strtotime($row_recent[0])))), 2, "0", STR_PAD_LEFT);
$startdate6m = "'".$year6m."-".$month6m."-01'";
$end_date = $startdate6m;
$initial6m = $startdate6m;
} else{
$year6m = date("Y", strtotime($row_recent[0]));
$month6m = str_pad(date("m", strtotime($row_recent[0]))-6, 2, "0", STR_PAD_LEFT);
$startdate6m = "'".$year6m."-".$month6m."-01'";
$end_date = $startdate6m;
$initial6m = $startdate6m;
}
}
$previous_6m = $initial6m;
if($run_number > 1){
# 6 Month
# Decrement date by 6 months
$month6m = date("m", strtotime($previous_6m));
if ($month6m <= 06){
$year6m = date("Y", strtotime($previous_6m))-1;
$month6m = str_pad((12-(6-date("m", strtotime($previous_6m)))), 2, "0", STR_PAD_LEFT);
$startdate6m = "'".$year6m."-".$month6m."-01'";
$end_date = $startdate6m;
} else{
$year6m = date("Y", strtotime($previous_6m));
$month6m = str_pad(date("m", strtotime($previous_6m))-6, 2, "0", STR_PAD_LEFT);
$startdate6m = "'".$year6m."-".$month6m."-01'";
$end_date = $startdate6m;
}
}
$previous_6m = $startdate6m;
}
?>发布于 2013-11-09 10:07:06
你的代码太过分了。所有这些代码,在while循环中,都可以用几行代码替换,例如:
$previous_6m = new DateTime($row_recent[0]);
$previous_6m->modify('first day of this month');
$run_number = 0;
while ($run_number < 15) {
$run_number++;
$previous_6m->modify('-6 month');
# do something with your new date
echo '$previous_6m = ', $previous_6m->format('Y-m-d'), "\n";
}演示。
发布于 2013-11-08 21:56:52
在每次迭代中,您都要将$prvious_6m设置为$initial6m。在第一次迭代中,定义了$intial6m,但是第二个if语句将失败(因为$run_number为1,此时不大于)。在迭代#2中,$intial6m永远不会设置,因为您没有进入第一个if语句,因为现在$run_number > 1。然而,第二个迭代在第二个if语句中。因此,您需要将第二个if语句更改为包含1,或者将$previous_6m = $initial6m放在第一个if语句中。
干杯
https://stackoverflow.com/questions/19869015
复制相似问题