Доброго времени суток. Есть небольшая проблемка, не могу понять в чем ошибка, подскажите пожалуйста.
Необходимо во вьюхе сравнить даты, и если сегодняшняя дата больше чем поле даты материала, то должна выводится строка "Закончилась", если же меньше, то должна выводится сама дата. Я темизировал вьюху, в итоге вот что получилось
<?php
print $fields['field_thumbnail']->content;
print $fields['title']->content;
print $fields['body']->content;
$now = date('d.m.Y');
$userDate = $fields['field_dateuser']->content;
echo $now;
echo $userDate;
if( $userDate < $now) {
echo 'Закончилась';
}
else {
print $fields['field_dateuser']->content;
}
?>
результат можно увидеть здесь
Проблема вот в чем, если ставить знак > то все записи выводят значение "Закончилась", а сейчас все записи выводят дату. Т.е. сам скрипт сравнения работает. Если же перменную $userDate привести к типу времени при помощи функции strrotime(), то значение переменной не выводится вообще. В общем я не могу понять в чем дело, и как это решить. Помогите пожалуйста.
Комментарии
http://yandex.ru/yandsearch?lr=147&text=%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D...
Ну это не ответ, вы думаете я не гуглил по этому вопросу? Тут проблема в том, что со значением $fields['field_dateuser']->content; ничего не получается сделать. Если использовать функцию mktime то если для сегодняшней даты все понятно, то как поступить вставить значение поля field_dateuser в функцию mktime во вьюшке?
Вы некорректно сравниваете даты, а сравниваете строки.
Ну с этим я конечно могу согласиться. Но опять же, тут вопрос в том, что я не могу провести никакую манипуляцию с содержимым поля field_dateuser. Вот сейчас я допустим привел все к числовому типу:
$now = date('d.m.Y');
$intNow = (int) $now;
$userDate = $fields['field_dateuser']->content;
$intUD = (int) $userDate;
echo $intNow;
echo $intUD;
if( $intUD < $intNow) {
echo 'Закончилась';
}
else {
print $userDate;
}
а в результате переменная $intUD вообще не выводится. И так при любых действиях. В чем причина я понять не могу.
я с самого начала попытался сделать так
if( strtotime($userDate) < strtotime($now)) - но результата не получил никакого.
Из вашего примера неясно, в каком формате вы храните дату в поле field_dateuser. Вы используете модуль Date?
Извините, я маленько ошибся. Переменная $intUD выводится, только со значением 0. Очередной вопрос - почему 0? (((
Нет, просто текстовая строка
Формат строки?
тип поля Текст, виджет "текстовое поле". Получается string. я его привожу к integer. И в итоге он мне выводит его как 0.
Вы не поняли. Я спрашиваю про формат строки даты, как вы ее храните? например "19.10.2013" или "2013-10-19".
Да, извините, не понял. Именно так как вы указали - 19.10.2013
А переменная $now в формате даты date(d.m.Y)
Тогда работайте с strtotime
http://ua2.php.net/manual/ru/function.strtotime.php, проверьте внимательно свой код еще раз. Приведение к целому числу делать не нужно. У вас должно быть что-то вроде этого
if (strtotime($userDate) < strtotime($now)) {...}
Делал - не дает положительного результата. Вот посмотрите http://befree.yobrand.ru/promotions
$intNow: 20.10.2013
$intUD: 01.01.2001
strtotime($intNow)1382198400
strtotime($intUD)
Результат: Закончилась
Вот что выводит в ответ на мой код
<?php$now = date('d.m.Y');
$userDate = $fields['field_dateuser']->content;
echo "\$intNow: ".$now."<br/>";
print "\$intUD: ".$userDate."<br/>";
$now = strtotime($now);
$userDate = strtotime($userDate);
echo 'strtotime('."\$intNow".')'.$now."<br/>";
print 'strtotime('."\$intUD".')'.$userDate."<br/>";
if($userDate < $now) {
echo 'Результат: Закончилась';
}
else {
print 'Результат: '.$userDate;
}?>
?>
В общем как видите не работает такой ход. Это один из первых вариантов которые я испробовал вместе с mktime()
<?php
$now = date('d.m.Y');
$userDate = $fields['field_dateuser']->content;
echo "\$intNow: ".$now."<br/>";
print "\$intUD: ".$userDate."<br/>";
echo 'strtotime('."\$intNow".')'.strtotime($now)."<br/>";
print 'strtotime('."\$intUD".')'.strtotime($userDate)."<br/>";
if(
strtotime($userDate) < strtotime($now)) {echo 'Результат: Закончилась';
}
else {
print 'Результат: '.strtotime($userDate);
}?>
Попробуйте так на первый взгляд одно и тоже, но попробуйте )) мне просто ща не когда тестить
Охх, дядьки... )
<?php // СТРОКА с датой в обозначенном формате ('день.месяц.год').
$userDate = '19.09.2013'; // Юникс-тайм для проверяемого ДНЯ.
$userDate_timestamp = strtotime($userDate); // Юникс-тайм для текущего ДНЯ.
$now_timestamp = mktime(0, 0, 0); $result = ($userDate_timestamp < $now_timestamp) ? 'Закончилась' : $userDate;
print
"Результат: $result"; ?>$userDate = '19.09.2013';
// Юникс-тайм для проверяемого ДНЯ.
$userDate_timestamp = strtotime($userDate);
// Юникс-тайм для текущего ДНЯ.
$now_timestamp = strtotime('now');
$result = ($userDate_timestamp < $now_timestamp) ? 'Закончилась' : $userDate;
print "Результат: $result";
timestamp тогда с текущим временем определяется, челу надо оное по нулям.
ну так я прочитал в самом топике написано
https://www.google.ru/search?q=define:дата
upd: хотя оно фиолетово так-то, но тогда уж просто time() )
ну хорошо если поле даты 17 часов сегодняшнего дня
на данный момент 15 часов -событие не совершилось
если 19 часов - совершилось
а у тебя сравнивается с 00:00:00
хотя посмотрел на то что ему надо получить по ссылке там действительно дата сравнивается
а я то думал у него там какие то события происходят в определенное время
) Так если у нас $userDate = '19.09.2013', то причем тут 15 часов?
а по моему у него всё правильно было ) единственная ошибка в этих строках
<?php
$now = strtotime($now);
$userDate = strtotime($userDate);
?>
но я нюансов php не знаю ) возможно php умеет менять типы переменных на ходу

я в других языках кодил всегда ) там так нельзя было
Спасибо всем за обсуждение, но опять 25((
если $userDate задана в коде, как у вас $userDate = '19.09.2013', то все работает. Но мне надо чтобы дату задавал юзер. и если делать так как я делал раньше $userDate = $fields['field_dateuser']->content; также не работает((
По логике все верно, но вот почему то я никак не могу манипулировать этими значениями из поля field_dateuser
Проверьте исходный код этого поля $fields['field_dateuser']->content, возможно там строка с датой завернута в теги html, вы уверены что там только дата?
Вот какой html-код генерируется друпалом
<div class="field-content">01.01.2001</div>
</div>
Честно говоря лично я в этом не вижу проблем. Мне кажется обертка с классом field-content не должна создавать таких проблем.
Блин, ну вы даете:), пропустите через strip_tags
ну вообще то объект поля уже должен содержать его значение - просто вывести и посмотреть на все его свойства
я-то это понимаю, но человек выводит через content поля вьюхи, пусть уберет теги для начала и убедиться что в них причина.
Ну алилуя))) Заработало!)) Всем огромное спасибо!! прям спасибище! ^_^
В общем на самом деле сыграла моя невнимательность) Мешала именно эта обертка, которая выводилась. Убрав обертку, все заработало так как надо. Просто получилось что сравнивалась дата в формате 21.10.2013 со строкой "
" и в этом была вся проблема.
Огромное спасибо всем участвующим. Решение найдено)