Сравнение дат MySQL в PHP - PullRequest
       5

Сравнение дат MySQL в PHP

2 голосов
/ 09 августа 2010

Я создаю приложение для друга, чтобы обрабатывать сроки. У меня есть настроенная страница, где каждый пользователь может видеть свою «работу» с указанием установленного срока. Мой вопрос ...

Как сравнить дату крайнего срока, который возвращается из запроса mysql как 2010.08.08, с сегодняшней датой?

Например ...

 <?php
while($row = mysql_fetch_array($result)){

$jobfinishdate = $row['jobfinishdate'];
$date = date('Y-m-d');

if ($jobfinishdate>$date)
 $jobfinishdate .= " - Not due yet!" ;
 else if ($jobfinishdate<$date)
  $jobfinishdate .= " - You didn't meet this deadline!";
  else if ($jobfinishdate==$date)
 $jobfinishdate .= " - Deadline is TODAY!";

} ?>

Это работает нормально. Но то, что я действительно хотел бы сделать, это показать сообщение «у вас есть 5 дней до крайнего срока. Есть идеи как обойти это?

Спасибо.

Шейн.

Ответы [ 5 ]

2 голосов
/ 10 августа 2010

Если возможно, я бы позволил базе данных вернуть количество дней с таким запросом:

SELECT jobfinishdate, datediff(jobfinishdate, NOW() AS days) FROM table

Затем используйте это количество дней:

while ($row = mysql_fetch_array($result)){
    $jobfinishdate = $row['jobfinishdate'];
    $days = $row['days'];   

    if ($days > 0) {
        $jobfinishdate .= " - Not due yet! $days until deadline" ;
    } elseif ($days < 0) {
        $jobfinishdate .= " - You didn't meet this deadline!";
    } else {
        $jobfinishdate .= " - Deadline is TODAY!";
}

}

Некоторые другие замечания:

  • Если вы сохраняете вычисление даты в PHP, переместите объявление $ date вне цикла while, потому что вам нужно сделать это только один раз.
  • Вы можете удалить последнее условие, если ($ jobfinishdate == $ date).Если дата не больше и не меньше, она может быть только равна.
2 голосов
/ 09 августа 2010
// calculate days left
$daysleft = round( ( strtotime( $jobfinishdate ) - time() ) / 86400 );

// print out text for $daysleft
if( $daysleft == 0 )
   print( "Deadline is today!" );
else if ( $daysleft > 0 )
   printf( "You have %d days until deadline.", $daysleft );
else
   print( "You did not meet the deadline!" );
2 голосов
/ 09 августа 2010
$days = (strtotime($jobfinishdate) - strtotime($date)) / (60 * 60 * 24);

Должно дать вам количество дней, оставшихся до крайнего срока.

Редактировать: выше всегда будет возвращать разницу в днях - для обработки или нет, до или после срока оплаты, может быть(используя только time(), как предложил Адам):

$date_passed = false;
$days = strtotime($jobfinishdate) - time();
if ($days < 0) { $date_passed = true; }
$days = $days / (60 * 60 * 24);

if (!$date_passed)
{
  echo "You have $days days left on this project.";
}
else
{
  echo "Deadline has expired $days days ago.";
}
0 голосов
/ 09 августа 2010

В запросе SQL:

SELECT
...,
TIMESTAMPDIFF(DAY, NOW(), `date_deadline`) AS days_to_deadline
...

Это приведет к положительному числу сроков и отрицательным для задач с истекшим сроком действия.

0 голосов
/ 09 августа 2010

Если вы используете PHP 5.3.0 или новее, вы можете использовать DateTime объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...