首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的变量没有在单独的if测试中初始化?

为什么我的变量没有在单独的if测试中初始化?
EN

Stack Overflow用户
提问于 2013-11-08 21:42:37
回答 2查看 156关注 0票数 0

对于第一次运行,我需要使用上一次MySQL date $row_recent[0]之前6个月的日期。对于1之后的所有运行,我使用一个前一个变量来存储前一个日期,然后将日期减少6个月。我已经确认,第一次如果测试产生预期的结果。(MySQL日期-6个月)。但是,由于$startdate6m未初始化,第二个if测试将$previous_6m输出为$previous_6m默认值。知道它为什么不认识$previous_6m = $initial6m

代码语言:javascript
复制
<?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;
}
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-09 10:07:06

你的代码太过分了。所有这些代码,在while循环中,都可以用几行代码替换,例如:

代码语言:javascript
复制
$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";
}

演示

票数 0
EN

Stack Overflow用户

发布于 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语句中。

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19869015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档