Некорректное выведение кол-ва дней между датами

sax player

Новичок
Некорректное выведение кол-ва дней между датами

Уважаемые господа,
Столкнулся с проблемкой:
Я храню даты в ДБ в виде unixtime, который получаю так:

PHP:
$tt = mktime(0,0,0, date('m' $timestamp),date('d' $timestamp),date('Y' $timestamp));
Я пытался подсчитать кол-во дней между датами так

PHP:
$days= ($endtime-$starttime)/24/60/60;
или так:
PHP:
$days = date('z',($endtime-$starttime))
Суть вопроса: из-за зимнего - летнего времени первый способ выводит дробное значение, которое приходится округлять, причем не совсем ясно, в какую сторону (это зависит от того, в какую сторону сменилось зимнее - летнее между двумя датами).

Второй вроде бы выводит верно, но по тем же причинам возможна потеря одного дня при переходе с зимнего не летнее время

наверное, можно ввести оффсет, скажем, так
PHP:
$tt = mktime(0,0,3, date('m' $timestamp),date('d' $timestamp),date('Y' $timestamp));
,
а потом убирать его перед использованием , но нет ли пути получше?

Заранее спасибо
 

sax player

Новичок
Все оказалось просто - данные, сгенеренные на удаленном сервере, там же надо и использовать.
А я скопировал таблицу на локальный сервер - вот и вылезла текущая разница в зимнем - летнем

Тему можно закрывать.
Извините за беспокойство

-~{}~ 06.12.08 16:27:

*****

в переменной $timestamp - unixtime события

-~{}~ 06.12.08 16:28:

dimagolov

не годимся, данные в unixtime
 

Beavis

Banned
Автор оригинала: sax player
не годимся, данные в unixtime
а какая причина хранить даты в не специально предназначенном для этого типе поля, а как число, тем самым лишая себя удобства использования кучи встроенных в MySQL функций для работы с датой?
 

dimagolov

Новичок
sax player, это мягко скажем странно. в MySQL есть и timestamp и спец-типы для дат, которые умеют хранить даты задолго до 1970 года.

ну в общем, раз ты упорствуешь, то ССЗБ
 

Beavis

Banned
sax player
для того, чтобы в БД хранить дату в формате DATE, а в PHP получать её в удобном для PHP формате (unix timestamp) придумали функции UNIX_TIMESTAMP для MySQL или strtotime для PHP
 

Фанат

oncle terrible
Команда форума
sax player
во-первых, те полторы функции, которые есть в пхп, назвать кучей можно только обладая очень богатым воображением
во-вторых, функции эти в пхп, а хранишь ты в базе. неувязочка получается.
в-третьих,
mktime(0,0,0, date('m' $timestamp),date('d' $timestamp),date('Y' $timestamp)); - это жесть.
 

sax player

Новичок
*****
Я попробовал. Действительно, хранить - выводить из date вполне возможно. И даже удобно, если нужно только хранить и выбирать.
но
1. У меня кроме просто хранения - нужно эти даты генерить, проверять,сравнивать, на основании их ветвить и т п. А это уже пхп. И unixtime работает прекрасно.
2. mktime(0,0,0, date('m' ,$timestamp),date('d' ,$timestamp),date('Y', $timestamp)); - это жесть.
Согласен, но это взято из вашего FAQ.
А вообще спасибо.
 

dimagolov

Новичок
sax player, ну ты сам же должен понимать что п.1 это детский лепет и гнилые отмазки на тему "почему мне надо делать конченно то, что можно сделать по-людски"
 

no_santa

Снегур
я-бы сделал проще... time() и хрен с ним, со всем.... спорим, будет работать?
второй вариант - действительно, через mysql (NOW()), но для этого тебе придется дополнительно парсить полученный результат. Хотя, в mysql есть функции для вычисления разницы между времядатами, причем с автоматической коррекцией летнего и зимнего времен. Look here - http://www.mysql.ru
 

sax player

Новичок
no_santa
Нет, просто time() неудобно, нужна именно первая секунда суток, если делать как я.
Тогда разницу получаем простой арифметикой.
А еще есть функция checkdate
http://www.php.net/manual/en/function.checkdate.php - весьма удобно, и date() позволяет свободно прибавлять - отнимать месяцы и дни и генерит корректную дату...
В общем, это работает.
А вообще можно (и просто) и unix, и date.
В случае с date() мне не нравится, что мы подсовываем мускулу строку, он ее жует в свой формат, а на вывод подает опять же строку. unix строже получается.

-~{}~ 08.12.08 13:07:

А еще - если надо просто сгенерить форму-календарь?
Все, что я встречал, используют unixtime, и сам я так же сделал.
Просто и удобно. Конечно, на выводе можно подать что хочешь, хоть бы и date, но нафига, спрашивается?

Кстати, насчет гнилых отмазок - я пока не услышал аргументов, кроме "батька сказал date - значит date и все!"
 

dimagolov

Новичок
sax player, никто тебя переубеждать не собирается. твоя проблема, сам с ней и играйся. не хочешь слушать советов, зачем вопросы задаешь?

п.с. в mysql из date отдает все что душа пожелаешь, в удобном тебе формате, хоть в timestamp, хоть как.
 
Сверху