![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
nz1 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
имеется колонка в БД с типом datetime туда записывается дата последнего обращения к файлу
так вот встала задача чтобы удалять этот файл по последнему к нему обращению через 30 дней дата следующего формата: 2001-01-01 01:01:01 пробовал химичить с переменными и вычеслять промежуток между ними (смотрел тут - http://php.com.ua/ru/tips/PRINT/php_mysql_date.htm), но так и ни чего не добился: $time=date("d-m-Y", strtotime($date)); $today=date('d-m-Y'); $time - последняя дата $today - сегодня также нужно вывести информацию о том, когда будет удален файл, тоисть прибавить к $time 30 дней и вывести в том же формате: d-m-Y спасибо за любую информацию |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
возможно ли переправить поле в число?
тогда храним там число таймстэп и все вычисления становятся очень простыми |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
вообще-то, вычисления с полем типа datetime ничуть не сложнее.
nz1, в MySQL богатейшие средства работы с датой. DATE_ADD() решит все твои проблемы. Химичить средствами РНР нет никауой необходимости |
|||
|
||||
gemaglabin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.2.2008 Репутация: нет Всего: нет |
Этот код выдаст тебе юникосвый таймстамп . С помощью time() узнаешь текущее время в unix формате.Вот и считай нужное тебе кол-во.Можно это сделать с помощью СУБД , но php это выполнит быстрее
|
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Если в момент, когда потребуется дата работаем в php - получаем в php, если в mysql - получаем дату в mysql.
таймстамп +30 дней в php:
Это сообщение отредактировал(а) flashaa - 11.2.2008, 13:27 |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
flashaa, во-первых, у него не +30, а -30
Во-вторых, у него нет никакого таймстампа. |
|||
|
||||
flashaa |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
GeneralElectric, если брать сначала дату последней модификации, то как раз плюс.
Если mysql :
Это сообщение отредактировал(а) flashaa - 11.2.2008, 13:41 |
||||
|
|||||
nz1 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
сделал так: if(strtotime('+ 30 day', $sdate) >= time() ) { //код } где $sdate - дата последнего доступа к файлу в формате datetime но ничего не работает |
||||||
|
|||||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
прошу прощения, был неправ
Это сообщение отредактировал(а) GeneralElectric - 13.2.2008, 09:34 |
|||
|
||||
flashaa |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Что именно должно работать? если вы вставили // код. Вот тестовый скрипт, который создает 2 файла с именами 1 и 2. Первому устанаваливает дату модификации в далекое прошлое, второму - на позавчера - 10 февраля. Затем получает информацию о файлах и проверяет устарели ли они по описанному в моем предыдущем посте алгоритму. Если файл устарел, выводит сообщение. Все правильно выведет - первый устарел.
Вообще если у вас дата модификации хранится в базе, то получение имен файлов, которые просрочены будет выглядеть так:
Только не забудьте подставить ваши данные подключения к серверу, название бд, таблиц, полей , директорию Это сообщение отредактировал(а) flashaa - 12.2.2008, 18:59 |
||||||
|
|||||||
nz1 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
flashaa, вот так код выглядит у меня:
где sdate - то самое поле с информацией о дате последнего доступа в поле типа datetime не проходит( |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Что заставляет людей хранить время в формате datetime? Чем unix-формат не устраивает?
Не проверял, но должно работать. |
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
интересный разговор на тему работы с датами в SQL и PHP был здесь -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
1) Тем, что unix_time выглядит как число и не читаем. 2) Метка времени строится относительно смещения GMT - серверы в разных часовых поясах покажут разное время и потому при неаккуратном обращении может быть путаница. Хотя это довольно редкий факт, у меня путаница случалась. 3) Ну и наконец тем, что timestamp не пригоден для дат в далеком прошлом и неближайшем будущем |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Непонятно, что именно не работает? Вообще при работе с SQL-запросами в целях быстрой отладки рекомендуется выводить получаемый запрос. И оценивать его. Т.е. перед отправкой запроса необходимо сделать
Дальше оцениваете запрос, исправляете ошибки, если они есть. Если нет, тогда возьмите этот запрос и напишите его в терминале работы с MySQL - сервером. Посмотрите, каков будет результат. Если ошибка синтаксиса - исправляете. Если ошибок нет, но возвращается отличный от желаемого результат, значит тогда проверяете ещё 2 пункта - корректны ли значения в запросе (хотя после проверки текста запроса этот вопрос должен отпасть), и смотрите собственно вашу базу - есть ли в ней действительно значения, которые подлежат выводу по данному запросу. Если не разберетесь, приводите текст запроса, структуру таблицы (получается с пом. запроса show create table `tbl_name`) и несколько строк таблицы. |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
1) Для чего date("d.m.Y H:i:s", $time) ? Это более универсально, зная unix-time ты сможешь знать абсолютно все данные - день недели, кол-во секунд, месяц прописью и т.д. datetime придется конвертировать. 2) Проблем никогда не было. Да и вообще это не проблема, если голова на плечах есть - такие трудности преодолеваются с легкостью. 3) Извините, вы на сайте используете даты а-ля 1436 год до н.э. ? Или 208563 год? Я на 100% уверен, что даты будующего с обновлением интерпретатора PHP будут поддерживаться + ваш движок не будет использоваться в течение 50 лет. |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Вот не люблю я когда начинается перетягивание одеяла. Одно не лучше другого. У одного есть и достоинства и недостатки, так и у другого. Я просто ответил на вопрос, почему в бд не хранится таймстамп. А не утверждаю, что неудобен вообще во всем и тд и тп. Кстати ничего не мешает мне получить метку из строкового представления даты с помощью strtotime, поиметь все возможности(и недостатки) временных меток.
В бд хранится таймстамп, равный 600. Это 10 минут. На сервере в Москве date('i:S') покажет 3 часа 10 мин. На сервере в Германии 2 часа 10 мин. Это хорошо если храниться таймстапм относительно нулевого смещения. Тогда мы сможем использовать gmdate() и все будет ок. НО! Если сохранена была метка, полученная с пом. time() то значит в бд хранится локальное время. Очень интересно потом расчитывать все эти смещения временные. Нет, но часто могут использоваться паспортные данные людей. А как известно людей, родившихся раньше 1970 года достаточно много сейчас. Это сообщение отредактировал(а) flashaa - 13.2.2008, 12:14 |
|||
|
||||
nz1 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
о да, то что нужно, спасибо! вот так выглядит мой рабочий код:
остальным также спасибо ![]() |
||||||
|
|||||||
flashaa |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Cкладывание меток - зло злейшее. Для первых шагов оно конечно годится, но для мало-мальски серьезных операций с датами - нет. Идут побоку переводы на летнее/зимнее время, февраль високосного года. Вот так неравномерности времени были бы учтены:
|
||||
|
|||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
CyClon, ты задал вопрос. Тебе на него ответили. Развернуто и подробно.
Надо сказать "спасибо" а не отфутболивать приведенные аргументы. Сказать "а у меня проблем не было и вообще проблемы только у дураков" можно в ответ вообще на любой довод, в любой дискуссии. И уж тем более не писать совсем откровенную чушь вида "таймстамп можно сконвертировать функцией date(), а datetime придется конвертировать". |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Признаю, что был груб по форме и неправ по сути в отношении автора топика. И приношу ему свои извинения.
Однако я был введен в заблуждение тем фактом, что для данного вопроса, скорее всего, был выбран неправильный раздел, и поместить его надо было в Центр помощи, если автор, по его словам, не программист, а дизайнер, и самостоятельно написать и отладить скрипт не в состоянии. Это сообщение отредактировал(а) GeneralElectric - 14.2.2008, 12:03 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |