[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прибавить к дате время
eyeless
Доброго времени суток!

У меня возникла проблема с прибавлением времени к дате.

Дано:
дата начала передачи - "2014-06-12 13:30:00"
продолжительность передачи - "01:00:00"

Задача:
Сложить дату начала и продолжительность, чтобы получилось "2014-06-12 14:30:00"

Дата и время не всегда одни и те же, так что '+1 hour' не пойдёт.

Заранее спасибо!
rooor
по разному можно...
например:
$start = strtotime("2014-06-12 13:30:00");
$time = explode(':', "01:00:00");
$result = $time[0] * 3600 + $time[1] * 60 + $time[2] + $start;

echo date('Y-m-d H:i:s', $resullt);
twin
да ну... всё проще гораздо.
eyeless
Цитата
Дата и время не всегда одни и те же, так что '+1 hour' не пойдёт.
Почему это, напиши как пробовал.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Лан, не буду томить.

    $date = '2014-06-12 13:30:00';
$time = 1;

echo date('Y-m-d H:i:s', strtotime($date) + $time * 3600);


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
rooor
twin
Цитата
продолжительность передачи - "01:00:00"

я понял, что это в базе хранится, если это так, то можно проще)
если поля в таблице timestamp и time, почему бы их просто не сложить?
SELECT DATE_FORMAT(`start` + `time`, '%Y-%m-%d %H:%i:%s') AS `stop`
Dezigo


$date = new DateTime();
$date->modify("+1 hour");
echo $date->format("Y-m-d G:i");
T1grOK
Цитата (rooor @ 12.06.2014 - 12:12)
по разному можно...
например:
$start = strtotime("2014-06-12 13:30:00");
$time = explode(':', "01:00:00");
$result = $time[0] * 3600 + $time[1] * 60 + $time[2] + $start;

echo date('Y-m-d H:i:s', $resullt);

Цитата (twin @ 12.06.2014 - 12:21)
Лан, не буду томить.

    $date = '2014-06-12 13:30:00';
    $time = 1;

    echo date('Y-m-d H:i:s', strtotime($date) + $time * 3600);

Плохая идея, однажды столкнетесь с тем, что покажет не то что нужно.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
twin
rooor
всё то ты хочешь усложнить :D
SELECT TIMESTAMP( `start` + `time` ) AS `stop`

Dezigo
Ну если так, то время сдвига переменной надо поставить.

T1grOK
Цитата
Плохая идея, однажды столкнетесь с тем, что покажет не то что нужно.
Народ требует подробностей.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
T1grOK
Сталкивался что strtotime с арифметикой в разные дни давало отклонения 1-2 и более часов без определенных закономерностей.
То есть сегодня при определенных условиях показало
01-01-2014 03:00:00
завтра при тех же условиях
01-01-2014 01:00:00

И выдержка из мануала
Замечание:
Не рекомендуется использовать эту функцию для математических операций. Целесообразней использовать DateTime::add() и DateTime::sub() начиная с PHP 5.3, или DateTime::modify() в PHP 5.2.


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Oyeme
Цитата (twin @ 12.06.2014 - 12:21)
Лан, не буду томить.

    $date = '2014-06-12 13:30:00';
$time = 1;

echo date('Y-m-d H:i:s', strtotime($date) + $time * 3600);

Будете голову потом ломать себе,все это конвертить в разные временные зоны. wink.gif
twin
Уболтали, черти. Был не прав. :)

T1grOK дал решение, правда в сыром виде.
ТС по секрету:

Свернутый текст
    $date = '2014-06-12 13:30:00';
$time = 1;

$date = new DateTime($date);
$date->modify('+'. $time .' hour');
echo $date->format("Y-m-d G:i:s");


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
eyeless
Всем спасибо за ответы. T1grOK, прав, сам наткнулся на подобный баг.

Цитата
$date = '2014-06-12 13:30:00';
    $time = 1;

    $date = new DateTime($date);
    $date->modify('+'. $time .' hour');
    echo $date->format("Y-m-d G:i:s");


а как быть, если время передачи будет "01:25:00" ?

Цитата
я понял, что это в базе хранится, если это так, то можно проще)
если поля в таблице timestamp и time, почему бы их просто не сложить?


нет, данные еще не в базе... там история такая, перед коммитом в базу MySQL я подготавливаю данные для коммита в коллекцию MongoDB.

А вообще данные берутся из Excel с помощью PHPExcel...

http://i.imgur.com/dXlsMQR.png
eyeless
Всем спасибо! Решил проблему, может быть не самым лучшим образом, но работает )))

Вот готовый код:
$start = new DateTime('2014-06-12 13:30:00');

$duration = new DateTime('01:35:00');

$hours = $duration->format('H');
$minutes = $duration->format('i');

$start->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'));
echo $start->format('Y-m-d H:i:s');
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.