|
|
|
| Есть текстовая строка с временем вида "hh:mm", как мне к ней добавить заданный промежуток времени и получить новое значение?
Ну к примеру:
00:35 + 02:30 = 03:05
23:31 + 02:21 = 01:52 (новые сутки)
|
Подскажите с чего начать, что покурить нужно для решения такой задачи? | |
|
|
|
|
|
|
|
для: Keyses
(20.05.2009 в 05:16)
| | для начала разбить на минуты и часы
<?
$h = date("H");//часы
$m = date("i");//минуты
?>
|
а потом уже манипулировать с ними, (прибавлять, отнимать) минуты или часы
пример сходу сказать не могу, потому что не ясно откуда берем то, что нужно прибавлять/отнимать | |
|
|
|
|
|
|
|
для: chexov
(20.05.2009 в 05:38)
| | При помощи mktime() переводишь время и добавляемый промежуток в метки времени, затем складываешь эти две метки времени, и полученную итоговую метку времени переводишь обратно в строку при помощи date() | |
|
|
|
|
|
|
|
для: Хулиган
(20.05.2009 в 10:09)
| | Спасибо, вроде всё работает, только возникает один вопрос почему-то при складывании двух меток времени, приходится явно увеличивать часы на число 2, иначе результат неверный. Почему так? | |
|
|
|
|
|
|
|
для: chexov
(20.05.2009 в 05:38)
| | Мне кажется такой способ будет не удобен, т.к. придётся вручную отлавливать переход за полночь. | |
|
|
|
|
|
|
|
для: Keyses
(20.05.2009 в 17:45)
| |
<?php
$h = 23;//часы
$m = 31;//минуты
$h1 = 02;//часы
$m1 = 21;//минуты
$last = mktime ($h+$h1, $m+$m1, 0, date("m"), date("d"), date("Y"));
print_r (date("H:i",$last));
?>
|
| |
|
|
|
|
|
|
|
для: VITtek
(20.05.2009 в 21:21)
| | Спасибо. Это более красивое решение нежели было у меня. Проблема с разницей в 2 часа возникала из-за того что я складывал 2 метки, а не значения внутри одной метки, как это сделано у вас. | |
|
|
|
|
|
|
|
для: VITtek
(20.05.2009 в 21:21)
| | Появилась новая проблема. Почему у хостера результат выполнения приведённой ниже функции всегда константен, такое чувство что метки там вообще никакой роли не играют :(
На локальной компе всё работает отлично.
date('G:i',mktime($time_start[0]+$time[0],$time_start[1]+$time[1],0,0,$day_time[0],0))
|
| |
|
|
|
|
|
|
|
для: Keyses
(22.05.2009 в 05:15)
| | Мало информации, копать надо в сторону как получаются метки
P.S. Метками ты задаёшь параметры mktime, который в свою очередь определяет сколько секунд прошло с 1970 года до твоих параметров. А date переводит эти секунды, в удобочитаемый вид (в данном случае часы:минуты). … Для корректного отображения времени, надо заполнять date("m") и date("Y") , для того чтобы учитывались такие параметры как високосный год, летнее и зимнее время. А в твоём варианте получается время 1970 года.
<?php
$last_date = date('G:i',mktime($time_start[0]+$time[0],$time_start[1]+$time[1],0, date("m"), $day_time[0], date("Y")));
?>
|
| |
|
|
|
|
|
|
|
для: VITtek
(22.05.2009 в 10:59)
| | Я почему-то думал что меткой называется результат от функции mktime(). Но если я вывожу только часы и минуты, какое мне дело до того высокосный там год или нет?
Ваш вариант сработал, спасибо! Просто хочется разобраться. | |
|
|
|
|
|
|
|
для: Keyses
(22.05.2009 в 12:49)
| | Я не мастак объяснять, это теория относительности. В Високосном году больше секунд, чем в простом году. По этому ты можешь получить, например вместо 01:34 , - 06:56
Или такой пример, Ты не складываешь а вычитаешь часы (01-13), заполнил только графу часы, а всё остальное оставил по нулям – в итоге в уме ты получаешь 1969 год, а mktime получает число -12 и выдаст тебе ошибку. | |
|
|
|
|
|
|
|
для: VITtek
(22.05.2009 в 13:24)
| | Всё предельно ясно :) Большое спасибо. | |
|
|
|