2013-11-15 4 views
1

У меня есть две даты в формате YYYY-MM-DD, и я хочу их сравнить, они выполняют определенную задачу.PHP сравнение двух дат

Я попробовал этот кусок кода:

  $temp_date = strtotime($cu['date']); 
     $temp_upto = strtotime($upto_date); 

     if($temp_date <= $temp_upto){ 
      echo "<tr id='highlight'>"; 
     }else{ 
      echo "<tr>"; 
      } 

$cu является массивом и содержит дату в том же формате. Это правильный способ сравнить даты в php? Выход, который я получаю, довольно странный! Я не разместил полный код, потому что он слишком длинный и нерелевантный для этого вопроса. Спасибо !.

ОБНОВЛЕНИЕ: Так вот что я пытаюсь сделать. У меня много нормальных дат, и у меня есть upto date, если нормальные даты меньше или равны до даты, тогда я хочу добавить id = "highlight". Все это внутри цикла для какой-либо другой цели моего кода.

Я повторил даты, как это:

echo "DATE: " . $temp_date + " UPTO: " . $upto_date; 

и выход был что-то вроде

DATE: 1349042400 UPTO: 00-00-0000 
DATE: 1349388000 UPTO: 00-00-0000 
DATE: 1352588400 UPTO: 00-00-0000 
DATE: 1352761200 UPTO: 00-00-0000 
DATE: 1353193200 UPTO: 00-00-0000 
DATE: 1353366000 UPTO: 1353193200 
DATE: 1354143600 UPTO: 1353193200 
DATE: 1354662000 UPTO: 1353193200 

еще сравнение не происходит. и я не вижу никаких изменений!

Люди, которые уже ответили на вопросы, я уже прочитал и внедрил большинство из них без каких-либо успехов.

ОБНОВЛЕНИЕ 2: Хотя я все еще пытаюсь выяснить мою проблему. Я хочу поделиться расширенным фрагментом кода здесь http://pastebin.com/nsVGV9dg

+0

Если вы сравните значения strtotime напрямую, это сработает. это простые целые числа, а '>'/'<'/'=' сравнения типов работают, как ожидалось. Вы конвертируете в строки, в порядке наименее значимого значения, поэтому ваши сравнения - это мусор. –

+0

Возможный дубликат [PHP - Compare Date] (http://stackoverflow.com/questions/2113940/php-compare-date) И все эти http://stackoverflow.com/search?q=+is%3Aquestion+%5Bphp % 5D + сравнить + даты –

ответ

4

Нет, это неправильно. Вы сравниваете две строки даты. Вы хотите сравнить временные метки вместо:

$temp_dateTS = strtotime($cu['date']); 
$temp_uptoTS = strtotime($upto_date); 

if ($temp_dateTS <= $temp_uptoTS) { 
    # code... 
} 

Это также возможно (и лучше), если вы используете DateTime класс:

$temp_date = new DateTime($cu['date']); 
$temp_upto = new DateTime($upto_date); 

if ($temp_date <= $temp_upto) { 
    # code... 
} 
+0

, пожалуйста, проверьте обновление в моем вопросе. Я получаю эту ошибку, когда использую DateTime ... Объект класса DateTime не может быть преобразован в int – user2933671

+0

@ user2933671: Это не то, как вы объединяете строки в PHP. Используйте '.' вместо' + '. Прочтите [документацию] (http://php.net/manual/en/language.operators.string.php). –

+0

@MikeB Да, вы правы! ответов на такой вопрос довольно много, и я пытаюсь реализовать их в своем коде с часа сейчас !. Я пытаюсь просто найти, почему, черт возьми, мое сравнение не работает, даже если метод верен! – user2933671

3

Я не сразу ответить на ваш вопрос, но я думаю, что лучше пользователь php DateTime объект.

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 
+0

Он не вычисляет разницу во времени в любом месте. –

+0

Он может рассчитать разницу и сравнить ее. Не вижу проблемы. –

Смежные вопросы