Я добавляю запись в БД, в том числе дату ( date("Y-m-d") ) мне надо к этой дате прибавить допустим 100 дней (суток) и получить дату в том же формате как это правильно сделать и как правильно сравнивать дату (в частности больше меньше)? короче цель, я в БД добавляю 2 даты, одна дата создания записи, вторая дата удаления записи, а потом при посещении кем-нибудь данной записи происходит сравнение текущей даты со второй датой (датой удаления), если они совпадают или вторая больше первой, запись удаляется.
Добавить сто дней: Код (PHP): <?php $date = date('Y-m-d', time() + 100 * 86400); Сравнивать даты в таком формате можно с помощью строковых функций Добавлено спустя 1 минуту 21 секунду: Если к уже существующей дате надо прибавить сто дней: Код (PHP): <?php $date = date('Y-m-d', strtotime('2010-01-20') + 100 * 86400); Добавлено спустя 1 минуту 37 секунд:Если к данным в mysql: Код (Text): mysql> SELECT '2005-01-01' - INTERVAL 1 SECOND; -> '2004-12-31 23:59:59'
вы имеете ввиду Код (Text): $cd = date("Y-m-d"); $dd = date("Y-m-d", strtotime($cd . ' +100 day')) ; ?
VLK, тебе topas самое верное подсказывает. Ты не пропустил случайно? Если ты говоришь про базу, то и смотри операции для родного майсиквельного типа DATETIME. Можно применять + / - INTERVAL. Или то же самое через DATE_ADD() / DATE_SUB() — дело вкуса. Есть 100500 полезных функций на стороне БД. Естественно две даты можно сравнивать на равенство или больше-меньше. Read the fucked manual.
artoodetoo,VLK, Самое правильное хранить их в time() и сравнивать. strtotime и нужен, чтобы не страдать. Читайте, про "Форматы отношений".
не в этом дело, не хочу показаться невежливым, но вы всегда даете такие ответ, после которых остаётся еще больше вопросов. нет, не пропустил, но чем будет хуже такая запись (просто она для меня более понятная): Код (Text): $cd = date("Y-m-d"); $dd = date("Y-m-d", strtotime($cd . ' +100 day')) ; Я как собираюсь делать, человек заходит на страницу с соответствующий записью (index.php?id=122), из БД я получаю данные (на запись с ID 122), в том числе дату удаления и сравниваю ее с текущей датой, если она меньше то происходит удаление записи из БД, а пользователю показывает что нет такой страницы, сравнение происходит так: Код (Text): // $dd - дата удаление из БД, в формате ("Y-m-d" if ( $dd < date("Y-m-d") ) { /* тут происходит удаление страницы */ } пойдет так?
Код (PHP): <?php if ($dd > date('Y-m-d', strtotime('-100 day')) { /* .... */ } Добавлено спустя 3 минуты 13 секунд: В чём преимущество: не требуется скармливать в функцию strtotime строку '2010-02-05 00:00:00 + 100 day'. Я уверен, что это будет работать, но считаю что не стоит заниматься парсингом такой строки, т.к. её поведение будет зависеть от данных в бд. Но это так, вопрос религии.
Подскажите, а как вычитать дату, т.е. есть 2 даты надо получить их разницу между ними в днях т.е.: Код (Text): $cd = date( 'Y-m-d' ); $dd = date( 'Y-m-d', strtotime($dd . ' +100 day') ); как вычесть $dd из $cd и получить результат только в цифрах т.е. 100
понятно почему ты ничего не понял ты не в курсе про типы данных. родной для PHP способ представления даты и времени — целое число, т.н. unix timestamp. именно в таком виде выдает время функции time() или filemtime(). оно измеряется в секундах. seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). причем это время по гринвичу. когда это время преобразуется в строку, учитываются настройки time zone. $d + 60 это время на 1 минуту после времени $d. $d + (60*60*24) это время на сутки после времени $d $d2 - $d1 это разница в секундах между двумя отметками даты-времени date() преобразует числовое значение времени в строку. результат уже не дата! формат неудобный для вычислений. strtotime() делает обратное преобразование из строки в дату, при этом умеет вносить поправки — это конечно здорово, но очень неэффективно. потому что к настоящей дате можно было бы просто прибавить/отнять число секунд безо всякой магии. читай блин справки по функциям. используй дла этого даты, а не строки Добавлено спустя 3 минуты 9 секунд: p.s. есть еще объектные типы для работы с датой-временем: DateTime, DateTimeZone и DateInterval. но о них читай когда с простыми типами разберешся.
Спасибо artoodetoo, не первый раз помогаете / объясняете, причем довольно доходчиво. Вот как я поступаю: Код (Text): // две даты, дата создания записи и дата ее удаления $cd = date("Y-m-d"); $dd = date("Y-m-d", strtotime($cd . ' +132 day')) ; // я перевожу их в числа $new_cd = strtotime($cd); $new_dd = strtotime($dd); // 86400 - в секундах это сутки $day = ($new_dd - $new_cd) / 86400 ; echo $day; // результат 132
всё верно. только замечу, что вот здесь Код (PHP): $day = ($new_dd - $new_cd) / 86400 ; может получиться дробное значение. поэтому если нужны целые дни, можно округлить результат через floor() или round().