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
Форумы портала PHP.SU :: Версия для печати :: Форматирование переменных времени
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Форматирование переменных времени

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

1. ant - 19 Мая, 2011 - 23:53:32 - перейти к сообщению
Есть например массив, содержащий количество минут:

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?
2. komprenda - 20 Мая, 2011 - 00:47:34 - перейти к сообщению
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. }
3. ant - 20 Мая, 2011 - 01:00:21 - перейти к сообщению
komprenda
Супер, огромное спасибо!
4. OrmaJever - 20 Мая, 2011 - 01:08:40 - перейти к сообщению
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. }
5. komprenda - 20 Мая, 2011 - 01:11:51 - перейти к сообщению
хотя нет, способ №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. }


у него там минуты, а не секунды
6. Alex_pac - 20 Мая, 2011 - 01:20:53 - перейти к сообщению
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.  
7. komprenda - 20 Мая, 2011 - 01:24:50 - перейти к сообщению
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 минут, кто его знает

 

Powered by ExBB FM 1.0 RC1