Спустя 10 минут, 40 секунд (1.12.2009 - 17:34) sergeiss написал(а):
Найди в хэлпе объект DateTime и его функции. В твоем случае очень поможет функция diff() этого объекта.
Спустя 57 секунд (1.12.2009 - 17:35) web-dev написал(а):
В хэлпе php или javascript?
Спустя 17 минут, 54 секунды (1.12.2009 - 17:53) Romms написал(а):
А в какой теме ты спрашиваешь?
Спустя 5 минут, 37 секунд (1.12.2009 - 17:58) web-dev написал(а):
Понятно. Спасибо.
Спустя 2 часа, 47 минут, 55 секунд (1.12.2009 - 20:46) Soldier Ghost написал(а):
Насчёт часов минут и секунд не знаю не проверял, но принцип сейчас объясню
есть такая функция strtotime() она переводить ДД-ММ-ГГГГ в дату формата Unix в секунды от 1 января 1970 года
В общем можеш делать с этими секундами всё что угодно до посинения
Надеюсь ты меня понял.
есть такая функция strtotime() она переводить ДД-ММ-ГГГГ в дату формата Unix в секунды от 1 января 1970 года
$now_date = strtotime(date("d-m-Y")); // Результат 1259614800 секунд
$future_date = strtotime("23-12-2012"); // Результат 1262293200 секунд
// Получили 2 числа теперь узнаем сколько дней осталось до 23 декабря 2012 года (Конец света обещают)
// floor - отбрасывает остаток, берём будущую дату затем отнимает сегоднешнию и делим на 86400 именно столько секунд в
//одних сутках, в итоге получаем дни
echo "До конца света осталось ".floor(($future_date - $now_date) / 86400 )." дн. )<br>";
В общем можеш делать с этими секундами всё что угодно до посинения
Надеюсь ты меня понял.
Спустя 16 дней, 3 часа, 54 минуты, 2 секунды (18.12.2009 - 00:40) Trialit написал(а):
Тоже вопрос по датам и их вычитанию, подскажите кто знает плз.:
Бронирование недвижимости, у каждого объекта прайс-лист в который внесены 12 значений цен на 1 предложение в зависимости от месяца (типо Декабрь - 100$, Январь - 110$). Храняться эти данный в бд mysql
Есть 2 переменные $end_time и $start_time обе задаются пользователем и содержат дату/время в Unix формате - дата начала и конца периода бронирования.
Узнать количество дней по разности не проблема, задача вот в чём - как посчитать цену если бронируемый период переходит на другой месяц(меняется цена). цену нужно выводить за выбранный период.
Ребят, подскажите хотя бы порядок действий пожалуйста, а то что-то мозг заклинило...придумать не могу.
Заранее спасибо.
Бронирование недвижимости, у каждого объекта прайс-лист в который внесены 12 значений цен на 1 предложение в зависимости от месяца (типо Декабрь - 100$, Январь - 110$). Храняться эти данный в бд mysql
Есть 2 переменные $end_time и $start_time обе задаются пользователем и содержат дату/время в Unix формате - дата начала и конца периода бронирования.
Узнать количество дней по разности не проблема, задача вот в чём - как посчитать цену если бронируемый период переходит на другой месяц(меняется цена). цену нужно выводить за выбранный период.
Ребят, подскажите хотя бы порядок действий пожалуйста, а то что-то мозг заклинило...придумать не могу.
Заранее спасибо.
Спустя 9 минут, 2 секунды (18.12.2009 - 00:49) VolCh написал(а):
Тут сначала надо принять административное решение. Я сейчас занимаю системой бронирования номеров в отеле, задолбался вытягивать из них клещами формальные правила.
А вообще вариант "в лоб" - разбиваешь период на 2, например с 15 декабря по 31 декабря и с 1 января по 14 января, для каждого считаешь, а потом суммируешь
А вообще вариант "в лоб" - разбиваешь период на 2, например с 15 декабря по 31 декабря и с 1 января по 14 января, для каждого считаешь, а потом суммируешь
Спустя 3 минуты, 30 секунд (18.12.2009 - 00:53) Trialit написал(а):
спасибо, вроде все обговорил, всё понятно.
Видимо кроме как разбить вариантов нет, а жаль..(
Видимо кроме как разбить вариантов нет, а жаль..(
Спустя 13 минут, 54 секунды (18.12.2009 - 01:07) VolCh написал(а):
Ну как вариант по дням перебирать.. но уж лучше разбить. Кстати, разбивать придётся на несколько частей, ведь могут забронировать и до марта месяца с декабря.
Спустя 3 дня, 19 часов, 48 минут, 24 секунды (21.12.2009 - 20:55) Trialit написал(а):
Подскажите плз, как выполнить сие разбиение если присутствует переход - декабрь - январь, т.е. - ещё меняется год, да и как-то переход должен быть 12-1, ещё вопрос а если( теоретически) люди бронируют на N лет?
Подскажите решение пожалуйста, хотя бы логически
Подскажите решение пожалуйста, хотя бы логически
Спустя 34 минуты, 9 секунд (21.12.2009 - 21:29) VolCh написал(а):
как-то так (PHP-based псевдокод)
Только уточнить нужно когда "расчётный час" и корректно его обрабатывать
$start = "2009-12-10";
$end = "2012-03-15";
$intervals = array();
for($current_start = $start; $current<=$end; $curent_start = last_day_of_month($current_start) + "1 day") {
$current_end = last_day_of_month($current_start) < $end ? last_day_of_month($current_start) + "1 day" : $end;
$intervals[] = array('start' => $current_start, 'end' => $current_end, 'days' => $current_end - $current_start);
}
Только уточнить нужно когда "расчётный час" и корректно его обрабатывать
Спустя 6 минут, 11 секунд (21.12.2009 - 21:35) Trialit написал(а):
спасибо, но где-то тут ошибка:
syntax error, unexpected '=', expecting ')'
в строке $intervals[] = array('start' => $current_start, 'end' => $current_end, 'days' = $current_end - $current_start);
И вопрос ещё -что понимаешь под "расчётным часом"?
syntax error, unexpected '=', expecting ')'
в строке $intervals[] = array('start' => $current_start, 'end' => $current_end, 'days' = $current_end - $current_start);
И вопрос ещё -что понимаешь под "расчётным часом"?
Спустя 7 минут, 15 секунд (21.12.2009 - 21:42) Trialit написал(а):
в last_day_of_month данные в каком формате должны быть?
т.е. туда ставим что-то типа $dme=date("t", strtotime($end_date));
и прибавляем 1?
last_day_of_month, имеется ввиду какого? текущего по проходу?
И реально, очень интересует именно логика разбиения этого, сам понимаешь -очень важно понять, по коду не допёр, признаюсь.
т.е. туда ставим что-то типа $dme=date("t", strtotime($end_date));
и прибавляем 1?
last_day_of_month, имеется ввиду какого? текущего по проходу?
И реально, очень интересует именно логика разбиения этого, сам понимаешь -очень важно понять, по коду не допёр, признаюсь.
Спустя 8 минут, 45 секунд (21.12.2009 - 21:51) VolCh написал(а):
Поправил, всё равно код этот не рабочий, специально указал, что это псевдокод
Ну, например, в гостиничном бизнесе сутки, чаще всего, считаются с 12:00 с округлением до дня в большую сторону. То есть формально, если заселиться 2009.12.31 в 11:00, а в 15:00 следующего дня (2010.01.01) выехать, то оплатить надо за трое суток, сутки с 2009.12.30 12:00:01 по 2009.12.31 12:00:00 (так как ты заехал до 12), сутки с 2009.12.31 12:00:01 по 2010.01.01 12:00:00 (реально прожитые) и сутки с 2010.01.01 12:00:01 по 2010.01.02 12:00:00 (так как в 12 ты не выехал). Причём, с 2009.12.30 12:00:01 по 2010.01.01 12:00:00 ты будешь платить по декабрьским тарифам, а с 2010.01.01 12:00:01 по 2010.01.02 12:00:00 по январским .
Ну, например, в гостиничном бизнесе сутки, чаще всего, считаются с 12:00 с округлением до дня в большую сторону. То есть формально, если заселиться 2009.12.31 в 11:00, а в 15:00 следующего дня (2010.01.01) выехать, то оплатить надо за трое суток, сутки с 2009.12.30 12:00:01 по 2009.12.31 12:00:00 (так как ты заехал до 12), сутки с 2009.12.31 12:00:01 по 2010.01.01 12:00:00 (реально прожитые) и сутки с 2010.01.01 12:00:01 по 2010.01.02 12:00:00 (так как в 12 ты не выехал). Причём, с 2009.12.30 12:00:01 по 2010.01.01 12:00:00 ты будешь платить по декабрьским тарифам, а с 2010.01.01 12:00:01 по 2010.01.02 12:00:00 по январским .
Спустя 3 минуты, 41 секунда (21.12.2009 - 21:55) VolCh написал(а):
В каком формате не важно, хоть в микросекундах от сотворения мира Главное, чтобы всё в одном формате было и, естественно, "1 day" перевести в этот формат. Хотя, наверное, проще брать первый день следующего месяца, он-то всегда одинаковый
Спустя 49 минут, 46 секунд (21.12.2009 - 22:45) Trialit написал(а):
Это понятно, но вот как не пробую - не могу подступиться здесь к твоему коду.
Не хочет работать не могу понять почему.
Пустой лист и всё, хотя ставлю чтение массива intervals
после него.
Заменил last_day_of_month($current_start) + "1 day"
выражением ($ldm+1), где $ldm=date("t", strtotime($start));
Не подскажешь в чём тут трабл?
Не хочет работать не могу понять почему.
Пустой лист и всё, хотя ставлю чтение массива intervals
после него.
Заменил last_day_of_month($current_start) + "1 day"
выражением ($ldm+1), где $ldm=date("t", strtotime($start));
Не подскажешь в чём тут трабл?
Спустя 1 час, 16 минут, 27 секунд (22.12.2009 - 00:01) VolCh написал(а):
<?php
date_default_timezone_set('Europe/Moscow');
$start = new DateTime("2009-12-10 12:00:00");
$end = new DateTime("2012-03-15 12:00:00");
$intervals = array();
/* @var $current_start DateTime */
$current_start = clone $start;
while ($current_start < $end) {
$current_end = new DateTime($current_start->format("Y-m-01"));
$current_end->modify("+1 month");
if ($current_end > $end)
$current_end = clone $end;
$intervals[] = array ('start' => $current_start, 'end' => $current_end);
$current_start = $current_end;
}
foreach ($intervals as $interval)
echo $interval['start']->format(DATE_ATOM) . " - "
. $interval['end']->format(DATE_ATOM) . "<br />";
Вроде работает
Спустя 12 минут, 56 секунд (22.12.2009 - 00:14) Trialit написал(а):
Низкий тебе поклон. Спасибо.
Работает. Буду разбираться теперь дальше. - цены сопоставлять с отрезками.
Очень-очень помог.
Работает. Буду разбираться теперь дальше. - цены сопоставлять с отрезками.
Очень-очень помог.
_____________
IT - это такая область, что приходится постоянно бежать вперед, чтобы оставаться на месте.