![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Dmitry_177 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
из БД MySQL берется дата $select_arr['enddate'], хранится она там как DATE
и есть сегодняшняя дата date("Y-m-d H:i:s") нужно посчитать между ними разницу в днях.. помогите как это сделать.. |
|||
|
||||
NNaarreekk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 768 Регистрация: 23.6.2007 Где: Армения Репутация: 0 Всего: 3 |
Используй strtotime
|
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
![]() -------------------- Amazing ![]() |
|||
|
||||
Sunvas |
|
||||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 8 Всего: 89 |
Разницу в днях между двумя датами в формате UNIX timestamp можно сверить, используя такую конструкцию:
Чтобы получить сегодняшнюю дату в UNIX timestamp - можно использовать функцию time(); Чтобы получить UNIX timestamp, можно пойти двумя способами: 1) взвалить это задание на MySQL 2) используя хитрости ПХП. Я бы посоветовал первый вариант т.к. он проще. Для этого:
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
||||
|
|||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Надеюсь никто не расценит это как оскорбление, но если речь идет о датах, получаемых из БД mysql, то вычислять разницу между ними в PHP будет величайшей глупостью. Насколько бедны средства PHP для работы с датами - настолько они богаты в mysql. там есть всё. В том числе и функции для вычисления количества дней.
to_days() в запросе решит все проблемы. |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 8 Всего: 89 |
Ну, можно и из-под мускула делать. Тема все-таки была задана не в разделе БД. А по сабжу, автору в помощь:
http://doc.dubs.odessa.net/MySQL/Date_and_..._functions.html -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Совершенно согласна с GeneralElectric. А еще добавлю, что если PHP и MySQL бегут на разных серверах, время может отличаться. Лучше сравнивать время, отсчитываемое в одной системе. правда, справедливости ради нужно заметить, что при расчетах разницы с точностью до дня это редко будет заметно.
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
Dmitry_177 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
ок, сделаю я такой запрос.. а как мне узнать результат в PHP? при выборе полей из таблицы там массив, все понятно.. А тут? непонятно..
|
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Во-первых, массив бывает всегда. Все, что возвращает база данных, ты получаешь в виде массива. Функци mysql_fetch_* ничего другого возвращать не умеют. И для базы данных одинаково, запрашиваешь ли ты поля таблицы или просто результат выражения. К примеру, все примеры функций в мануале показывают именно второе. К примеру, SELECT 1+1;
после выполнения этого запроса база вернет тебе массив с одним элементом, в котором будет число 2. Никакой разницы с запросом SELECT two FROM numbers; Во-вторых, сдается мне, что ты собрался делать отдельный запрос на вычисление. Это даже хуже, чем считать в пхп. Ну ладно, если одну дату надо. А если 20? Вся суть в том-то и состоит, что вычислять прямо в том же запросе, который получает данные! просто пишешь SELECT *, TO_DAYS(NOW()) - TO_DAYS(`enddate`) FROM... чтобы удобно обращаться к нему, сделай в запросе алиас, SELECT *, TO_DAYS(NOW()) - TO_DAYS(`enddate`) as days FROM... Вообще, хотя учить синтаксис SQL задавая вопросы на форуме - это очень легкий и приятный способ, но лучше бы, всё же, немножко начинат ьего осваивать самостоятельно, по учебникам. |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Возможности у них вообщем-то одинаковые, но в PHP чуть длинее получится код, т.к. готовых решений типа to_days меньше. В данном случае конечно надо считать в Mysql - с этим согласен. Это сообщение отредактировал(а) flashaa - 15.1.2008, 13:44 |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
"типа to_days", как раз, есть - GregorianToJD()
Но дело не в том, что в PHP готовых решений меньше. В PHP вообще отсутствует такой тип данных, как дата. А в MySQL - присутствует. Это принципиальное различие, которое влечет за собой проблемы разной степени тяжести. |
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Например какие проблемы в PHP? Я пока не видел ни одной, кроме необходимости писать больше кода.
С компонентами даты мы можем работать. Получить дату(timestamp) из строки можем, при чем на тех же началах, что и в mysql. Это сообщение отредактировал(а) flashaa - 15.1.2008, 15:18 |
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Вот именно, что в пхп есть только таймштамп. Со всеми своими ограничениями.
В общем, данная полемика кажется мне бессмысленной, а посему я закругляюсь |
|||
|
||||
flashaa |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
НУ почему бессмысленной? Мне действительно интересно какие проблемы с датами конкретно в пхп.
Ф-ции то пхп-шные поддерживают работу с компонентами, зачем нам тип, если неявно функциями все будет предусмотрено? Причем и переходы на летнее время и высокосные года и все ньюансы, свойственные именно датам. вот вам аналог интервала:
Вот сумирование с другой меткой (корректное суммирование)
Вот разница между датами $date1 и $date2:
Просто в пхп все без ВСТРОЕННЫХ готовых решений, вот и все. Ничем не больше он ограничен, чем mysql. Это сообщение отредактировал(а) flashaa - 15.1.2008, 16:09 |
||||||
|
|||||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Ответьте все-таки, GeneralElectric.
Или получится что полемика, описанная вами, шла именно с вашей стороны, т.к. я то свое мнение аргументирую =) |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
flashaa, ничего, если я подключусь?
1 апреля 1899 года - дата? А 28 февраля 2038? Интересно увидеть вычисление разницы между ними ;). Особенно в свете утверждения Хотя финт с strtotime красив, не спорю ![]() -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Dmitry_177 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
а может так лучше сделать?
|
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Лучше чем что?
|
|||
|
||||
Dmitry_177 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
чем в запросе применить: as days
|
|||
|
||||
GeneralElectric |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Мда. Печально.
|
|||
|
||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
||||
|
||||
FractalizeR |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 27.12.2007 Где: Россия/Москва Репутация: 2 Всего: 4 |
В MySQL есть еще очень удобная TIMESTAMPDIFF для получения разницы между двумя датами.
-------------------- Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |