Код (Text): <?php header('Content-Type: text/html; charset=UTF-8'); $referrer = "domain.com"; // Соединяемся, выбираем базу данных $link = mysql_connect('localhost', 'test_db', 'pass') or die('Не удалось соединиться: ' . mysql_error()); echo 'Соединение успешно установлено'; mysql_select_db('test_db') or die('Не удалось выбрать базу данных'); //Проверка на совпадения $res = mysql_query("SELECT domain FROM domains WHERE domain = '$referrer'"); if(mysql_num_rows($res) > 0) { echo("такие данные уже есть"); $res = mysql_query("SELECT time FROM domains WHERE domain = '$referrer'"); echo mysql_result($res, 0)."\t"; //Распечатываем поле time $dt = mysql_result($res, 0); $dt = new DateTime($res); $dt->add(new DateInterval('P30S')); //Прибавим к time 30 секунд echo $dt . "\n"; //Распечатываем обновленный time } else { // Заносим данные в базу $sql = 'INSERT INTO domains(domain, time) VALUES("'.$referrer.'", NOW())'; if(!mysql_query($sql)) {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} else {echo '<center><p><b>Данные успешно добавлены!</b></p></center>';} } // Закрываем соединение mysql_close($link); ?> Говорит: В чем ошибка?
В том, что вы resource функции mysql_query суете в конструктор new DateTime($res); DateTime::__construct() expects parameter 1 to be string Неужели не понятно написано? Вы не понимаете англ.? А переводчик, тоже забыли где находится?( Ну а Документация для чего public DateTime::__construct() ([ string $time = "now"........ Какой тип? String правильно, а вы суете тип resource и удивляетесь? Пора бы уже мозги включать.
Ага, незаметил. Код (Text): <?php header('Content-Type: text/html; charset=UTF-8'); $referrer = "domain.com"; // Соединяемся, выбираем базу данных $link = mysql_connect('localhost', 'test_db', 'pass') or die('Не удалось соединиться: ' . mysql_error()); echo 'Соединение успешно установлено'; mysql_select_db('test_db') or die('Не удалось выбрать базу данных'); //Проверка на совпадения $res = mysql_query("SELECT domain FROM domains WHERE domain = '$referrer'"); if(mysql_num_rows($res) > 0) { echo("такие данные уже есть"); $res = mysql_query("SELECT time FROM domains WHERE domain = '$referrer'"); echo mysql_result($res, 0)."\t"; //Распечатываем поле time $dt = mysql_result($res, 0); $dt = new DateTime($dt); $dt->add(new DateInterval('P30S')); //Прибавим к time 30 секунд echo $dt . "\n"; //Распечатываем обновленный time } else { // Заносим данные в базу $sql = 'INSERT INTO domains(domain, time) VALUES("'.$referrer.'", NOW())'; if(!mysql_query($sql)) {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} else {echo '<center><p><b>Данные успешно добавлены!</b></p></center>';} } // Закрываем соединение mysql_close($link); ?> Теперь:
Может разные имена наконец дашь? Добавлено спустя 2 минуты 51 секунду: сделай var_dump(new DateTime($dt)); что показывает?
Это нормальное явление. Здесь переопределение идет. gelius, Попробуйте без базы данных сделать: Код (PHP): <?php $date='2000-12-31'; $date=new DateTime($date,new DateTimeZone('Europe/Moscow')); $date->add(new DateInterval('PT30S')); echo $date->format('Y-m-d --- H:i:s'); ?> И вообще нет new DateInterval('P30S') - такого нету, есть PT30S Еще есть DateInterval::createFromDateString. Ну и конечно, же вам суда: php.net/manual/ru/datetime.formats.php
Не, нормальное явление когда дают осмысленные имена переменным и поменьше переопределений. Тогда код легко читать и поддерживать.
Выдает: Fatal error: Call to undefined method DateTime::add() in /home/hosting/time.php on line 4 Версия PHP 5.2.17 Добавлено спустя 8 минут 32 секунды:
Учись-это лучше чем создавать опять новую объектную переменную. Даже не вкурсах, что у вас происходит, но эта ошибка значит, что функция отсутствует. Попробуйте процедурный способ, а не объектный. Воспользуйтесь алиасом: Код (PHP): date_add($date,new DateInterval('PT30S')); Или вообще попробуйте переустановить php на более свежую версию. Ну вообще-это уже доступно с 5 версий.
А если создать что будет процессор взорвется от неожиданности? Ничего ужасного не будет, но код будет приятней читать.
В общем проблема. Это работает только с пхп 5.3. Но обновиться на 5.3 не могу т.к. для него нет Zend Optimizer-а, а без него никак. Существует альтернативное решение для арифметических операций со временем?
Код (PHP): date_default_timezone_set('Europe/Moscow'); $date='2000-12-31'; // 2000-12-31 00:00:00 $date=date('Y-m-d H:i:s',strtotime($date)+30); echo $date; //2000-12-31 00:00:30 Смотря что требуется можно много способов придумать Посмотрите аналоги.
Сори, меня не было некоторое время онлайн. Задача: В бд пишется рефферер и время посещения с данным рефферером. Если с последнего захода с данным рефферером прошло больше n минут, время посещения нужно обновить. Т е для начала мне нужно прибавить к времени прошлого посещения с заданным рефферером n минут, потом сравнить его с текущим временем.
на стороне PHP можно так: Код (PHP): $ts = strtotime($str) + $n * 60; // получили время как unix timestamp (т.е. в виде колиества секунд) но подозреваю, что и исходные данные и результат все в базе, поэтому вопрос: НАХУА вообще тащить это в PHP? у mysql своих операций с датой-временем выше крыши. там добавляйте и там сравнивайте. Для примера: http://stackoverflow.com/questions/1436827/adding-30-minute ... -php-mysql
ООП это конечно хорошо, но чем SQL то не угодил? SELECT INTERVAL 1 DAY + "1997-12-31"; -> 1998-01-01 http://phpclub.ru/mysql/doc/date-and-time-functions.html p.s. о как, одновременно об одном и том же )