Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Количество дней между датами, неверно считает
 
 автор: segafrompiter   (24.03.2012 в 18:44)   письмо автору
 
 

2 поля формата DATE в бд, в одной хранится к примеру дата заезда гостя в отель, во второй - дата выезда.
Гостю надо рассчитать количество дней, которое он проведет в нем.
Т.е. по идее надо вычесть date_end(выезд) из date_begin (заезд) ,

$dateend и $datebegin равны соответствующим значениям в бд, т.е. в том же формате.

$zapros=mysql_query(SELECT TO_DAYS('$dateend')-TO_DAYS('$datebegin') from guests_table where gost_id=222")
$kolvodays=mysql_result($zapros,0,0);


К примеру с 25 марта по 30 марта он считает 5 дней, по пальцам - 6 дней, но конечно 30-25=5.
а с 5 марта по 5 мая - 59 дней, по пальцам - 62 дня.
В первом случае он не считает дни включительно, во втором вообще непонятно куда 3 дня пропадают.

DATEDIFF('$dateend','$datebegin')

Дает тот же результат,
в первом случае я могу вручную добавить 1 день к результату, а вот во втором случае уже непонятно как действовать.

Тестирую все на Денвере на ноутбуке.

  Ответить  
 
 автор: Valick (в гостях)   (24.03.2012 в 19:08)
 
   для: segafrompiter   (24.03.2012 в 18:44)
 

$dateend
по идее там должно быть имя поля, а у вас там какая-то переменная

  Ответить  
 
 автор: Sfinks   (24.03.2012 в 19:13)   письмо автору
 
   для: segafrompiter   (24.03.2012 в 18:44)
 

Что у вас за запрос?
$dateend и $datebegin это что? Переменные ПХП или вы имели ввиду имена столбцов?

Если у вас в этих переменных имена столбцов таблицы guests_table, то запрос должен быть таким:
SELECT TO_DAYS(`$dateend`)-TO_DAYS(`$datebegin`) from guests_table where gost_id=222
и проверьте кавычки.... Либо в начале запроса допишите, либо в конце уберите.

Если у вас в них даты, то часть from guests_table where gost_id=222 вообще не нужна. И запрос должен быть
SELECT TO_DAYS('$dateend')-TO_DAYS('$datebegin')

Ну и наконец проверьте их значения все-таки. Так-как запрос
SELECT TO_DAYS( '2012-05-05' ) - TO_DAYS( '2012-03-05' )
возвращает 61. Что совпадает с вашим "по пальцам"-1.

  Ответить  
 
 автор: segafrompiter   (24.03.2012 в 19:36)   письмо автору
 
   для: Sfinks   (24.03.2012 в 19:13)
 

ошибка была в заполненной дате в бд, было 3 марта вместо 5-го марта.

А то, что он не считает дни включительно, решается только +1 или надо вводить время, чтобы высчитывать точно минуты, а из них дни ?

  Ответить  
 
 автор: Sfinks   (24.03.2012 в 22:09)   письмо автору
 
   для: segafrompiter   (24.03.2012 в 19:36)
 

Даже не знаю что на такое ответить..... 5 минус 3 равно 2 или 3 (включительно)? Интересно почему с датой должно быть по другому? Решается (если это конечно можно считать проблемой) так:
SELECT TO_DAYS('2012-05-05') - TO_DAYS('2012-03-05') +1

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования