Разница в датах в php - PullRequest
       1

Разница в датах в php

0 голосов
/ 01 марта 2012

Я пытаюсь получить разницу в днях между двумя датами. Первая дата - текущий день. Другая дата - их день рождения. Я хочу посчитать разницу между сегодняшним днем ​​и их следующим днем ​​рождения. В настоящее время он выводит корректно, если пользователь печатает в своем bday, как сегодня, но все остальное просто портится. Я хотел бы рассчитать его по дням.

Например, если я введу свой 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/>";
    }
}

Ответы [ 2 ]

1 голос
/ 01 марта 2012
 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 голосов
/ 01 марта 2012

Пожалуйста, посмотрите на этот код, он выдает, как вы хотите.

    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/>";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...