Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Форматирование переменных времени

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ant
Отправлено: 19 Мая, 2011 - 23:53:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Янв. 2011  
Откуда: Украина, Крым


Помог: 0 раз(а)




Есть например массив, содержащий количество минут:

PHP:
скопировать код в буфер обмена
  1. $arr[0]=45;
  2. $arr[1]=120;
  3. $arr[2]=135;
  4. $arr[3]=4;


Какой оптимальный вариант приведения этих чисел 45, 120, 135, 4 в такой формат (можно строку):
$arr[0]=00:45
$arr[1]=02:00
$arr[2]=02:15
$arr[3]=00:04?
 
 Top
komprenda
Отправлено: 20 Мая, 2011 - 00:47:34
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1. $arr[0]=45;
  2. $arr[1]=120;
  3. $arr[2]=135;
  4. $arr[3]=4;
  5.  
  6. // Способ #1 имеет недостатки
  7.  
  8. for ($i = 0, $k = count($arr); $i < $k; ++$i) {
  9. $h = floor($arr[$i] / 60);
  10. $h = $h < 10 ? "0" . $h : $h; // если больше 1440 будет баг
  11. $m = $arr[$i] - $h * 60;
  12. $m = $m < 10 ? "0" . $m : $m;
  13. echo("$h:$m<br />");
  14. }
  15.  
  16. // Способ #2 универсальный
  17.  
  18. for ($i = 0, $k = count($arr); $i < $k; ++$i) {
  19. $t = $arr[$i] * 60;
  20. $h = (int) date("H", $t) - 3; // эпоха UNIX начинается 1 января 1970 года в 03:00
  21. $h = $h < 10 ? "0" . $h : $h;
  22. echo("{$h}:" . date("i", $t) . "<br />");
  23. }

(Отредактировано автором: 20 Мая, 2011 - 01:04:05)

 
 Top
ant
Отправлено: 20 Мая, 2011 - 01:00:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Янв. 2011  
Откуда: Украина, Крым


Помог: 0 раз(а)




komprenda
Супер, огромное спасибо!
 
 Top
OrmaJever Модератор
Отправлено: 20 Мая, 2011 - 01:08:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




komprenda интересно конешно но автор просил оптимальный Подмигивание
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr[0]=45;
  3. $arr[1]=120;
  4. $arr[2]=135;
  5. $arr[3]=4;
  6. foreach($arr as $v) {
  7. echo date('i:s', $v), '<br>';
  8. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
komprenda
Отправлено: 20 Мая, 2011 - 01:11:51
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




хотя нет, способ №2 тоже не универсальный, с 3:00 же начинаем нужно ещё день проверять

PHP:
скопировать код в буфер обмена
  1.  
  2. for ($i = 0, $k = count($arr); $i < $k; ++$i) {
  3. $t = $arr[$i] * 60;
  4. $d = (int) date("d", $t);
  5. $h = (int) date("H", $t)
  6. if ($d > 1) {
  7. $h = $h > 3 ? 12 + 3 - $h : $h - 3;
  8. }
  9. else {
  10. $h-= 3; // эпоха UNIX начинается 1 января 1970 года в 03:00
  11. }
  12. $h = $h < 10 ? "0" . $h : $h;
  13. echo("{$h}:" . date("i", $t) . "<br />");
  14. }
  15.  


(Добавление)
OrmaJever пишет:
komprenda интересно конешно но автор просил оптимальный Подмигивание
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr[0]=45;
  3. $arr[1]=120;
  4. $arr[2]=135;
  5. $arr[3]=4;
  6. foreach($arr as $v) {
  7. echo date('i:s', $v), '<br>';
  8. }


у него там минуты, а не секунды

(Отредактировано автором: 20 Мая, 2011 - 01:32:18)

 
 Top
Alex_pac
Отправлено: 20 Мая, 2011 - 01:20:53
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $arr[0]=45;
  3. $arr[1]=120;
  4. $arr[2]=10000;
  5. $arr[3]=4;
  6. foreach ($arr as &$a) {
  7.         $a = sprintf("%02d:%02d",floor($a / 60),($a % 60));
  8. }
  9. print '<pre>';
  10. print_r ($arr);


в отличие от date() не ограничено 24 часами

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => 00:45
  3.     [1] => 02:00
  4.     [2] => 166:40
  5.     [3] => 00:04
  6. )
  7.  
 
 Top
komprenda
Отправлено: 20 Мая, 2011 - 01:24:50
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




Alex_pac пишет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $arr[0]=45;
  3. $arr[1]=120;
  4. $arr[2]=10000;
  5. $arr[3]=4;
  6. foreach ($arr as &$a) {
  7.         $a = sprintf("%02d:%02d",floor($a / 60),($a % 60));
  8. }
  9. print '<pre>';
  10. print_r ($arr);


в отличие от date() не ограничено 24 часами

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => 00:45
  3.     [1] => 02:00
  4.     [2] => 166:40
  5.     [3] => 00:04
  6. )
  7.  


может автор рассчитывает сколько до нового 2012 года осталось XXX дней, XX часов, XX минут, кто его знает
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB