Pull to refresh

Comments 21

Не смогли изобрести машину времени и придумали переводить время.
Я обычно все операции с датами делаю в базе данных. В большинстве баз учтено то что в дне может быть не 24 часа, в году не 365 дней и прочие нюансы
А как в MySQL посчитать количество дней между 2-мя DATETIME? И при том чтобы с дробной частью?
К сожалению я редко использую MySQL, в основном Oracle и поэтому не могу вам ответить. Но удивлюсь если там нет типа интервал и функции которая считает количество дней в интервале.
DATEDIFF и ему подобные. TO_DAYS тоже поможет. Читайте мануал.
day(date1-date2)

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

hour((date1-date2)-day(date1-date2))
Проблема в том что если мы считаем интервал с 12 часов одного дня до 24 часов другого дня, и при этом происходит переход на летнее или зимнее время, количество дней никак не будет полтора. А DATEDIFF возвращает целое число. Вобщем наверное задача у меня слишком специфична для стандартных функции MySQL.
UFO just landed and posted this here
Да, в БД есть тип данных дата/датавремя, и оперировать с ними проще. А в пхп его как такового нет. :(
Используйте UTC и да будет вам счастье.
я использую для этого strtotime('+1 day', $time); обрабатывает всегда правильно, и дней одинаково получается ;)
упс, немного не уловил вопрос и не подумал, что вы ищете разницу 2-х дат, но все равно strtotime хороша
я бы руки оторвал за такой код. Date медленная функция, strtotime еще медленнее.

$date = explode(':', date('m:d:Y', strtotime($arr_date)));
$arr_mk = mktime (0, 0, 0, $date[0], $date[1], $date[2]);
зачем вообще дату в текстовом представлении хранить? 0_о
Ну знаете, всяко бывает :) Эти даты впоследствии использовались в SQL.
P.S. Нет, не в запросах в цикле :)
Согласен, код не оптимален, но иногда лучше прозрачно, чем быстро :)
$arr_mk = gmmktime (0, 0, 0, date('m', strtotime($arr_date)), date('d', strtotime($arr_date)), date('Y', strtotime($arr_date)));
$dep_mk = gmmktime (0, 0, 0, date('m', strtotime($dep_date)), date('d', strtotime($dep_date)), date('Y', strtotime($dep_date)));

И вроде как никаких проблем с переходом на летнее время.
да, на поясе GMT 0 не переводят время :). Для дней и не критично, но если нужно учитывать локаль то можно споткнуться.
Sign up to leave a comment.

Articles

Change theme settings