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

Форум PHP

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

 

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

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

тема: Как увеличить время?
 
 автор: Keyses   (20.05.2009 в 05:16)   письмо автору
 
 

Есть текстовая строка с временем вида "hh:mm", как мне к ней добавить заданный промежуток времени и получить новое значение?
Ну к примеру:
00:35 + 02:30 = 03:05
23:31 + 02:21 = 01:52 (новые сутки)


Подскажите с чего начать, что покурить нужно для решения такой задачи?

  Ответить  
 
 автор: chexov   (20.05.2009 в 05:38)   письмо автору
 
   для: Keyses   (20.05.2009 в 05:16)
 

для начала разбить на минуты и часы
<?
$h 
date("H");//часы 
$m date("i");//минуты
?>

а потом уже манипулировать с ними, (прибавлять, отнимать) минуты или часы
пример сходу сказать не могу, потому что не ясно откуда берем то, что нужно прибавлять/отнимать

  Ответить  
 
 автор: Хулиган   (20.05.2009 в 10:09)   письмо автору
 
   для: chexov   (20.05.2009 в 05:38)
 

При помощи mktime() переводишь время и добавляемый промежуток в метки времени, затем складываешь эти две метки времени, и полученную итоговую метку времени переводишь обратно в строку при помощи date()

  Ответить  
 
 автор: Keyses   (20.05.2009 в 17:46)   письмо автору
 
   для: Хулиган   (20.05.2009 в 10:09)
 

Спасибо, вроде всё работает, только возникает один вопрос почему-то при складывании двух меток времени, приходится явно увеличивать часы на число 2, иначе результат неверный. Почему так?

  Ответить  
 
 автор: Keyses   (20.05.2009 в 17:45)   письмо автору
 
   для: chexov   (20.05.2009 в 05:38)
 

Мне кажется такой способ будет не удобен, т.к. придётся вручную отлавливать переход за полночь.

  Ответить  
 
 автор: VITtek   (20.05.2009 в 21:21)   письмо автору
 
   для: Keyses   (20.05.2009 в 17:45)
 


<?php 
$h 
23;//часы 
$m 31;//минуты

$h1 02;//часы 
$m1 21;//минуты
$last mktime ($h+$h1$m+$m10date("m"), date("d"), date("Y"));
print_r (date("H:i",$last));
?>

  Ответить  
 
 автор: Keyses   (21.05.2009 в 13:46)   письмо автору
 
   для: VITtek   (20.05.2009 в 21:21)
 

Спасибо. Это более красивое решение нежели было у меня. Проблема с разницей в 2 часа возникала из-за того что я складывал 2 метки, а не значения внутри одной метки, как это сделано у вас.

  Ответить  
 
 автор: Keyses   (22.05.2009 в 05:15)   письмо автору
 
   для: 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))

  Ответить  
 
 автор: VITtek   (22.05.2009 в 10:59)   письмо автору
 
   для: 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],0date("m"), $day_time[0], date("Y")));

?>

  Ответить  
 
 автор: Keyses   (22.05.2009 в 12:49)   письмо автору
 
   для: VITtek   (22.05.2009 в 10:59)
 

Я почему-то думал что меткой называется результат от функции mktime(). Но если я вывожу только часы и минуты, какое мне дело до того высокосный там год или нет?
Ваш вариант сработал, спасибо! Просто хочется разобраться.

  Ответить  
 
 автор: VITtek   (22.05.2009 в 13:24)   письмо автору
 
   для: Keyses   (22.05.2009 в 12:49)
 

Я не мастак объяснять, это теория относительности. В Високосном году больше секунд, чем в простом году. По этому ты можешь получить, например вместо 01:34 , - 06:56

Или такой пример, Ты не складываешь а вычитаешь часы (01-13), заполнил только графу часы, а всё остальное оставил по нулям – в итоге в уме ты получаешь 1969 год, а mktime получает число -12 и выдаст тебе ошибку.

  Ответить  
 
 автор: Keyses   (22.05.2009 в 17:25)   письмо автору
 
   для: VITtek   (22.05.2009 в 13:24)
 

Всё предельно ясно :) Большое спасибо.

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

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