|
|
|
| Есть такая проблема. Имеется код, который подсчитывает дату на 36 часов вперед. Вроде бы все просто:
$limit = date('j F',time()+129600); // 60*60*48 = 129600
|
Но! Нужен скрипт, который будет считать каждые 36 часов от даты Х, например от Нового Года, и затем выводить эту дату, если она является ближайшей следующей кратной 36 часам к текущей дате. Например, если сегодня 10 августа - будет выведено 11 августа (если только он является кратным 36 часам), а не 9 августа.
Не знаю даже как это все реализовать... Помогите пожалуйста!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: SharkNancy
(10.08.2013 в 03:56)
| | Ближайшую или именно кратную 36 часам? | |
|
|
|
|
|
|
|
для: confirm
(10.08.2013 в 04:00)
| | Ближайшую и кратную 36) | |
|
|
|
|
|
|
|
для: SharkNancy
(10.08.2013 в 05:52)
| | Кратную, если только повезет. То есть, если я буду контролировать время на клиенте, и клиент будет находиться в онлайн режиме более 36 часов, то 100% вероятности, что я смогу идентифицировать такую метку времени, запрашивая текущее время каждую секунду с помощью JavaScript.
На сервере такое гарантированно невозможно, так как запрос скрипта не обязательно произойдет во время отвечающее этому условию.
Отсюда следует, что отслеживать надо не кратное, и не ближайшее время, а время которое больше или равно 36 часам - текущее время минус контрольное время выраженное в часах.
Самое разумное, на мой взгляд, это получив эту разницу времени, сравнив ее с указанным периодом, добавляем к контрольной метке этот период и запоминаем ее для последующего сравнения с текущим временем. Если будут требоваться для чего либо все прошедшие эти метки времени, то их можно будет всегда получить, если стартовое время так же хранить
<?
$start = new DateTime('2013-05-12 03:35:00'); //стартовое время
$end = new DateTime(); //текущее время
$interval = new DateInterval('PT36H'); //заданный интервал в 36 часов
//так добавляется к контрольному времени период для дальнейшего контроля
$start = $start->add($interval);
//так можно получить все прошедшие интервалы времени
//от стартовой метки по текущее время
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $day) echo $day->format('Y-m-d H:i:s').'<br>';
|
Можно использовать и функции даты/времени, например time(), и все расчеты производить в этих единицах времени, результат будет тот же. | |
|
|
|
|
|
|
|
для: confirm
(10.08.2013 в 06:13)
| | помоему все гораздо проще
из текущей даты вычитаем дату Х, затем делим эту байду на 36 часов, находим остаток и складываем текущая дата + (36 часов - остаток) | |
|
|
|
|
|
|
|
для: Valick
(11.08.2013 в 00:54)
| | Я о чем то ином по сути говорил? Только вот остаток то зачем, и делить чего-то, для бухгалтерии? Просто если больше или равно периоду, то запоминаем новую временную метку. | |
|
|
|
|
|
|
|
для: confirm
(11.08.2013 в 05:31)
| | Я о чем то ином по сути говорил?
да
Просто если больше или равно периоду, то запоминаем новую временную метку.
зачем? по условию у нас есть дата Х все остальное математика. Например если человек относительно даты икс обратился первый раз через пол года, что бы вы там запоминали все это время? | |
|
|
|
|
|
|
|
для: Valick
(11.08.2013 в 07:05)
| | Читайте внимательно.
Что касается полугодичной давности, то все может быть, но это не ко мне. Я же не представляю, нужно ли то, что полгода не востребовано, да и время Х для каждого своего, это уже нечто. | |
|
|
|
|
|
|
|
для: confirm
(11.08.2013 в 07:13)
| | Я внимательно читаю, и не только что пишите вы и то что пишу я, но и ТЗ.
На сервере такое гарантированно невозможно, так как запрос скрипта не обязательно произойдет во время отвечающее этому условию.
а вот условие
дату, если она является ближайшей следующей кратной 36 часам к текущей дате | |
|
|
|
|
|
|
|
для: Valick
(11.08.2013 в 07:30)
| | Вы ко мне какие-то претензии предъявляете?
1. Я не вижу условий в вопросе, кроме описания точки отсчета.
2. Если о времени Х лично для меня установленного еще во времена революции, то такого быть не должно, по той простой причине, что меня просто не знают, да я могу и просто не существовать.
3. Если стартовая точка отсчета для каждого индивидуальна, то разумно и назначит ее старт пользователем - всякие деления побоку при этом.
4. Если эта точка для всех одна, то зачем ждать меня полгода, есть и другие пользователи, которые ее обновят
5. Если все это лежит безхозно длительное время, то это никому не нужно.
Что и как, вот этого в вопросе нет, поэтому и сделано мною замечание о времени запроса сервера. А зачем мне гадать? Коли вы провидец и точно знаете как должно быть, то свои предложения не мне, а автору вопроса. | |
|
|
|
|
|
|
|
для: confirm
(11.08.2013 в 07:44)
| | Слишком много если, для человека которому незачем гадать :-P
Коли вы провидец и точно знаете как должно быть, то свои предложения не мне, а автору вопроса.
автор залётная пришла и ушла, а вы мне гораздо роднее :-D | |
|
|
|