Страница 1 из 2

Дата на PHP

Добавлено: 25 фев 2005, 10:02
Bolat
Привет всем.

Задача: вывести из базы все записи, у которых значение поля "Date" не больше
20-02-2005.

Для этого навероне надо знать как получать дату в результате арифметических действий.
Например если сегодня 25-02-05:

Код: Выделить всё

<?php
 echo  $D=Date('dmy')-1;
?>
Получается 250204, а мне надо чтобы получалось 240205.
Или:

Код: Выделить всё

<?php
 echo  $D=Date('dmy')-100;
?>
Получается 250105, а мне надо чтобы получалось 061104.

Добавлено: 25 фев 2005, 10:31
Absurd
Юзай mktime
<?php
echo date("M-d-Y", mktime(0, 0, 0, 02, 25-1, 2005));
?>

Кроме того, он автоматически переведет месяц и год, так что date("M-d-Y", mktime(0, 0, 0, 02, 29, 2005)); будет первым марта, а date("M-d-Y", mktime(0, 0, 0, 02, 60, 2005)); будет первым апреля.

PS: Я как-то работал с одним человеком, по темпераменту похожим на вас. Он заводил в базе MySQL три столбца - год, месяц и день, а потом их пересчитывал с учетом переноса. Не делайте так. Пожалуйста.

Добавлено: 25 фев 2005, 11:14
UUU
Дата хранится в базе, то зачем делать вычисления на стороне скрипта? Пусть БД это делает:
where Date<'2005-02-24'

where Date<Now() - interval 3 month

Добавлено: 25 фев 2005, 11:24
Bolat
Absurd
Рахмет. То что надо.
PS: Я как-то работал с одним человеком, по темпераменту похожим на вас. Он заводил в базе MySQL три столбца - год, месяц и день, а потом их пересчитывал с учетом переноса. Не делайте так. Пожалуйста.
:-)
Замечательно! А ведь у меня такая мысль промелькнула в начале! Но я в последнее время стараюсь себя сдерживать и предварительно изучать все возможности мощного языка PHP и др.

Добавлено: 25 фев 2005, 13:24
UUU
[quote="Absurd"]Кроме того, он автоматически переведет месяц и год, так что date("M-d-Y", mktime(0, 0, 0, 02, 29, 2005))]

А date("M-d-Y", mktime(0, 0, 0, -1, -1, 2005));
тоже прглотит?

Добавлено: 25 фев 2005, 14:13
Absurd
А date("M-d-Y", mktime(0, 0, 0, -1, -1, 2005)); тоже прглотит ?
По одной из коррдинат такое точно будет работать. По двум не знаю - попробуй.

Добавлено: 26 фев 2005, 21:13
Zvepr
Че то я не понял, что тут за разгон такой!... мхе.. Абсурд, оригинально, но я что то не понял... вообще в php для удобства есть формат даты TIMESTAMP, который представляет собой число длинной в 14 цифирок. это число показывает сколько секунд прошло с 1 янв 1970 года. Конечно, звучит как глупость, но поверьте, очень полезно, особенно когда касается сортировки...
Вызывается функцией time();

т.е. ложим в базу: INSERT INTO .... _time=".time()."....
потом достаем $x=mysql_query("SELECT * FROM ...");$row=mysql_fetch_array($x);
чтобы сразу отсортировать по дате делаем такой запрос
SELECT * FROM ... WHERE ... ORDER BY _time asc|desc (по возрастающей|по убывающей)
и выбираем нужное количесвто (если по страницам) LIMIT-ом

теперь как преобразовать это 14 значное чилсло в нормальную человеческую дату из переменной $row['_time']? вот так:
$tempo=getdate($row['_time']);
в $tempo возвратиться массив с датами и ключами:
"seconds"
"minutes"
"hours"
"mday"
"wday"
"mon"
"year"
"yday"
"weekday"
"month"
0 (само число)
(http://ru.php.net/manual/en/function.getdate.php)

вот и пишем $OUT.="date: ".$tempo['mday'].'/'.$tempo['mon'].'/'.$tempo['year'];

Вообще, в БД mysql есть тип колонки TIMESTAMP, и вроде как можно даже делать так "INSERT INTO ... ('_time') VALUES(NOW())"но у меня так не работало, поэтому просто вставлял "INSERT INTO ... ('_time') VALUES(".time().")"

Добавлено: 26 фев 2005, 21:19
Zvepr
И кстати да!
Привет, Болат! я тя еще помню.... как в соревнованиях делишки то??... млин... а вот я что то забросил секцию... плохо... зато проект дали - сайт сделать! потом зато на танцульки запишусь! не руками конечно махать, но тоже не плохо, тем более больше пригодиться, покрайней мере в молодости, дабы человек я сам по себе мирный!

Добавлено: 26 фев 2005, 22:00
UUU
Кстати, надо заметить, что хоть тип TIMESTAMP в 4 мускуле остался, но он возвращается как DateTime, чтобы возвращался по прежнему в TIMESTAMP надо прибавить 1, т.е. писать
select TIMESTAMP_field+1 from table where 1;

Добавлено: 27 фев 2005, 10:59
Zvepr
мхе... надо будет почитать!)) А так, можно не извращаться и сделать вместо TIMESTAMP BIGINT(14) - тоже выход!