[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сделать время по нарастающей
littleman
Подскажите как лучше сделать время по нарастающей ?
Есть время 16:50:30
И нужно сделать шаг до 16:52:25
Шаг состоит из 5 секунд.
Вот так чтобы выглядело.
16:50:30
16:50:35
16:50:40
16:50:45
16:50:50
16:50:55
16:51:00
16:51:05

Или вот так на другие сутки
23:59:50
23:59:55
00:00:00
00:00:05

В голову не чего не приходит как решить лучше.
Kusss
$start = mktime(16, 50, 30, date("m"), date("d"), date("Y"));
$finish = mktime(date("H", $start), date("i", $start)+1, date("s", $start)+55, date("m", $start), date("d", $start), date("Y", $start));
for ($i = $start; $i <= $finish; $i = $i+5) {
echo '<br>'.date('H:i:s', $i);
}
Не самое оптимальное решение конечно.
Guest
А мне больше DateTime нравится. У него есть красивый метод modify:

// в пределеах одних суток
$end = DateTime::createFromFormat('H:i:s', '16:52:25');
$end = DateTime::createFromFormat('H:i:s', '16:52:25');

// или если разные сутки
//$current = DateTime::createFromFormat('Y-m-d H:i:s', '2016-02-27 16:50:30');
//$end = DateTime::createFromFormat('Y-m-d H:i:s', '2016-02-28 00:00:05');


do {
echo $current->format('H:i:s') . PHP_EOL;
$current->modify('+5 seconds');
} while($current <= $end);


http://ideone.com/4SL640
Guest
P.S. Опечатка тут у меня:
$end = DateTime::createFromFormat('H:i:s', '16:52:25');
$end = DateTime::createFromFormat('H:i:s', '16:52:25');


Ну думаю понятно, что вместо первого $end должно быть $current.
Kusss
$start = strtotime('1970-01-01 16:50:30');
$finish = strtotime('1970-01-01 16:52:25');

так поболее читаемо
littleman
Спасибо !!! Kusss и Guest Бомба а не код ! Ща буду дальше допиливать, а то собрал как-то вело тренажёр, писаны на городил и сам запутался biggrin.gif
Благодарю !
littleman
Kusss
Я написал про время, у меня как раз там ещё дата прописывается .
2016-02-27-16-55-30
Только без тире, но ща я переделаю под себя Спасибо еще раз !
littleman
Передалал под себя всё в норме, как нужно, одна проблемка, переносит на след. строку расширение как сделать чтобы этого не было ?
Получается вот так.
#EXTINF:680000,
live-20160227165035
.ts
#EXTINF:680000,
live-20160227165040
.ts
#EXTINF:680000,
live-20160227165045
.ts
#EXTINF:680000,
live-20160227165050
.ts
#EXTINF:680000,
live-20160227165055
.ts
#EXTINF:680000,
live-20160227165100
.ts

А нужно
Чтобы .TS в один ряд .
#EXTINF:680000,
live-20160227165055.ts



$start = DateTime::createFromFormat('YmdHis', '20160227165030');
$finish = DateTime::createFromFormat('YmdHis', '20160227165225');


$file = "live.m3u8";
//если файла нету... тогда
if( !file_exists($file)) {
$fp = fopen($file, "w+"); // ("r" - считывать "w" - создавать "a" - добовлять к тексту), мы создаем файл
fwrite($fp, "#EXTM3U\n #EXT-X-TARGETDURATION:10\n #EXT-X-PLAYLIST-TYPE:VOD\n");
do {
$k = $start->format('YmdHis') . PHP_EOL;
fwrite ($fp, "#EXTINF:680000,\nlive-".$k.".ts\n" );
$start->modify('+5 seconds');

} while($start <= $finish);
fwrite($fp,"#EXT-X-ENDLIST");
fclose ($fp);
}

Вроде не какие <BR> и \n нет на след. сроку.
Guest
Ну PHP_EOL это же \n и есть.
ИНСИ
// Обходим циклом 10 раз
for ($x = 1; $x <= 10; $x++) {

// Форматируем время и выводим с интервалом в 5 сек.
echo date('H:i:s', strtotime('+' . ($x * 5) . ' second')) . PHP_EOL;
}
Быстрый ответ:

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