2012-03-01 121 views
0

我试图在两个日期之间获得天数差异。第一天是当天。另一天是他们的生日。我想计算今天和他们下一个生日之间的差异。目前,如果用户今天输入他们的bday,它会正确输出,但是其他任何东西都会被混淆。我想按天计算一下。php日期差异

例如,如果我输入我的bday为01/11/1988为例,我的程序将输出0 Years, 1 Months, 21 Days。如果我能够正确输出年,月,日,那么我可以计算总天数,但截至目前,它只是不能正常工作。谢谢参观。这里是我的代码:

if (isset($_POST["birthday"])){ 
    $birthday=$_POST["birthday"]; 
    if (!empty($birthday)){ 
     $birthdayArray = explode("/", $birthday); 
     if (count($birthdayArray) != 3 || strlen($birthday) != 10){ 
      echo "<b>Please follow the format (ex. 09/15/1988).</b><br/>"; 
      }else{ 
       $month = $birthdayArray[0]; 
       $day = $birthdayArray[1]; 
       $year = $birthdayArray[2]; 
       echo "Your bday is: ".$month."/".$day."/".$year; 
       echo "<br/>"; 
       if (strcmp($currentMonth,$month) == 0 && strcmp($currentDay,$day) == 0){ 
        echo "Your birthday is today.<br/>"; 
       }else{ 
        $date1 = new DateTime("$currentYear-$currentMonth-$currentDay"); 
        if (strcmp($currentMonth, $month) <= 0 && strcmp($currentDay, $day) < 0){ 
         $currentYear = $currentYear + 1; 
         $date2 = new DateTime("$currentYear-$month-$day"); 
        }else{ 
         $date2 = new DateTime("$currentYear-$month-$day"); 
        } 
        $interval = $date1->diff($date2); 
        echo $interval->y." Years, ".$interval->m." Months, ".$interval->d." Days."; 

       } 
      } 
    }else{ 
     echo "<b>Please enter your birthday.</b><br/>"; 
    } 
} 
+0

这需要进行基本的调试。什么时候出问题了?测试输出是什么'month',''day'和'year'显示? – 2012-03-01 08:34:11

+0

它们显示用户输入的日期,例如,如果我输入09/15/1988,那么$ month将是09,$ day将是15,$ year将是1988. – stytown 2012-03-01 08:36:21

+0

好吧,然后进一步调试。每次操作后都要测试每个值的输出。它在哪一点脱轨? – 2012-03-01 08:49:06

回答

1
if (strcmp($currentMonth, $month) <= 0 && strcmp($currentDay, $day) < 0){ 
      $currentYear = $currentYear + 1; 

这是什么情况实际上在做什么?

如果当前月份小于生日月份,则表示当前年份增加。但你应该以相反的方式做。

可能是你想实现这一点:

//assume BIRTHDAY : 03/24/1990  
if(...) 
    echo "today birthday "; 
    else 
    { 
    if(currentMonth > $month) // may be today : 04/21/2012 
    { 
    $currentYear++; 
    } 
    else if(currentMonth == $month) // may be today : 03/29/2012 
    { 
    if($currentDay > $day) // may be today : 03/29/2012 
    { $currentYear++; } 
    } 
    } 
    $date2 = new DateTime("$currentYear-$month-$day"); 
0

请看看这段代码,它给了你的愿望。

if (isset($_POST["birthday"])){ 
    $birthday=$_POST["birthday"]; 
    if (!empty($birthday)){ 
     $birthdayArray = explode("/", $birthday); 
     if (count($birthdayArray) != 3 || strlen($birthday) != 10){ 
      echo "<b>Please follow the format (ex. 09/15/1988).</b><br/>"; 
      }else{ 
       $month = $birthdayArray[0]; 
       $day = $birthdayArray[1]; 
       $year = $birthdayArray[2]; 
       $currentMonth = date('m'); 
       $currentDay = date('d'); 
       $currentYear = date('Y'); 
       echo "Your bday is: ".$month."/".$day."/".$year; 
       echo "<br/>"; 
       if (strcmp($currentMonth,$month) == 0 && strcmp($currentDay,$day) == 0){ 
        echo "Your birthday is today.<br/>"; 
       }else{ 
        $date1 = new DateTime("$currentYear-$currentMonth-$currentDay"); 
        if (strcmp($currentMonth, $month) <= 0 && strcmp($currentDay, $day) < 0){ 
         $currentYear = $currentYear + 1; 
         $date2 = new DateTime("$currentYear-$month-$day"); 
        }else{ 
         $date2 = new DateTime("$currentYear-$month-$day"); 
        } 
        $interval = $date1->diff($date2); 
        echo $interval->y." Years, ".$interval->m." Months, ".$interval->d." Days."; 

       } 
      } 
    }else{ 
     echo "<b>Please enter your birthday.</b><br/>"; 
    } 
}