Перейти к содержимому


Сравнить значения дат


Сообщений в теме: 4

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 21 Июль 2015 - 08:58

Пытаюсь сравнить поле "Дата отправки демо" с текущей датой.

Если дата отправки демо меньше или равно 30 дней (т.е. с момента отправки прошло 30 или более дней), то Приоритет = Высокий.
Такой код проставляет всегда приоритет высоким


$demo_send = date("Y-m-d H:s:i", strtotime($line['Дата отправки демо']));
$curdate = date("Y-m-d H:i:s");


if (($demo_send <= $curdate * 60*60*24*30) AND $line['Дата отправки демо'] != '0000-00-00 00:00:00') {
    $line['Приоритет'] = 'Высокий';
}
else
{;}


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Июль 2015 - 09:34

Во-первых, зачем вы переставили местами секунды (s) и минуты (i)? Опечатка?

$demo_send = date("Y-m-d H:s:i", strtotime($line['Дата отправки демо']));

Если же все-таки имелось ввиду "Y-m-d H:i:s", то это лишнее, т.к. в полях с типом "дата" она уже хранится в этом формате.

Во-вторых, что за умножение даты на "60*60*24*30"? По логике должно быть прибавление 30 дней, умножать дату - это нонсенс. Да и прибавлять в случае вашей задачи нужно к дате отправки, а не к текущей.

В-третьих, прибавлять все таки нужно не к дате в формате строки ("Y-m-d H:i:s" или любому другому), т.к. система не настолько умна, чтобы это интерпретировать, а к числовому представлению даты, которое производит функция strtotime.

Ну и в четвертых (хотя это уже не влияет на логику работы), пустой else прописывать нет необходимости, язык понимает и if сам по себе.

В итоге, код должен быть таким:

$demo_send = strtotime($line['Дата отправки демо']);
$curdate = time();

if (($demo_send + 60*60*24*30 <= $curdate) AND $line['Дата отправки демо'] != '0000-00-00 00:00:00') {
    $line['Приоритет'] = 'Высокий';
}


#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 21 Июль 2015 - 09:55

Не срабатывает вычисление.
Поставил дату "Дата отправки демо" - на 16 июля (т.е. попадает под условие), но приоритет остался низким.

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Июль 2015 - 10:02

Каким образом она подпадает под условие? Я вас так понял, что дата отправки должна быть старше 30 дней:

Цитата

с момента отправки прошло 30 или более дней

Т.е. для сегодняшней даты это 21 июня и раньше.

#5 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 21 Июль 2015 - 10:07

Снова опечатался. С момента отправки прошло не более 30 дней.
Соответственно вычисление должно выглядеть:

 $demo_send + 60*60*24*30 <= $curdate

Спасибо.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных