Как Вы преобразовываете 0:00:00 в часы, минуты, секунды в PHP?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

5
задан Mark Biek 17 September 2008 в 14:18
поделиться

10 ответов

попытайтесь использовать разделение

list($hh,$mm,$ss)= split(':',$duration);
2
ответ дан 14 December 2019 в 13:51
поделиться

Что-то вроде этого?

$vals = explode(':', $duration);

if ( $vals[0] == 0 )
   $result = $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
else
   $result = $vals[0] . 'hours, ' . $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
3
ответ дан 14 December 2019 в 13:51
поделиться

Довольно простой:

list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";

Это только отобразит часы или минуты, если будет кто-либо, и вставляет "и" перед секундами, если существуют часы, минуты или оба для отображения. Если бы Вы хотели стать действительно необычными, то Вы могли бы добавить некоторый код для отображения "часа" по сравнению с "часами" как соответствующего, так же в течение многих минут и секунд.

1
ответ дан 14 December 2019 в 13:51
поделиться

Почему беспокойство с regex или взрывается, когда php обрабатывает время очень хорошо?

$sTime   = '04:20:00';
$oTime   = new DateTime($sTime);
$aOutput = array();
if ($oTime->format('G') > 0) {
    $aOutput[] = $oTime->format('G') . ' hours';
}
$aOutput[] = $oTime->format('i') . ' minutes';
$aOutput[] = $oTime->format('s') . ' seconds';
echo implode(', ', $aOutput);

Преимущество - то, что можно переформатировать время однако, Вам нравится (включая,/пополудни, корректировки к часовому поясу, дополнение / вычитание, и т.д.).

1
ответ дан 14 December 2019 в 13:51
поделиться

Одно небольшое изменение могло быть:

$vals = explode(':', $duration);

if ( $vals[0] == 0 )
   $result = "{$vals[1]} minutes, {$vals[2]} seconds";
else
   $result = "{$vals[0]} hours, {$vals[1]} minutes, {$vals[2]} seconds";
1
ответ дан 14 December 2019 в 13:51
поделиться

взорвитесь (), для анютиных глазок. Это - задание для регулярных выражений!

<?php
preg_match('/^(\d\d):(\d\d):(\d\d)$/', $video_duration, $parts);
if ($parts[1] !== '00') {
    echo("{$parts[1]} hours, {$parts[2]} minutes, {$parts[3]} seconds");
}
else {
    echo("{$parts[2]} minutes, {$parts[3]} seconds");
}

Полностью непротестированный, но что-то как этот должно работать. Обратите внимание, что этот код предполагает, что фрагмент часа всегда будет двумя цифрами (например, трехчасовое видео было бы 03:00:00 вместо 3:00:00).

Править: Ретроспективно, использование регулярных выражений для этого является, вероятно, случаем сверхразработки; взорвитесь (), сделает задание точно также и вероятно даже будет быстрее в этом случае. Но это был первый метод, который придет на ум, когда я считал вопрос.

-1
ответ дан 14 December 2019 в 13:51
поделиться

Преобразовывание 0:00:00 к часам, минутам и секундам в PHP действительно легко.

$hours = 0; $minutes = 0; $seconds = 0;

-1
ответ дан 14 December 2019 в 13:51
поделиться

Вот другой путь с различными функциями, который более открыт и более пошаговое для новичков. это также обрабатывает 1 час и много часов... Вы могли попробовать, используют ту же логику для обработки этих 0 минут и 0 секунд.

<?php
// your time
$var = "00:00:00";

if(substr($var, 0, 2) == 0){
    $myTime = substr_replace(substr_replace($var, '', 0, 3), ' Minutes, ', 2, 1);
}
elseif(substr($var, 1, 1) == 1){
$myTime = substr_replace(substr_replace($var, ' Hour, ', 2, 1), ' Minutes, ', 11, 1);   
    }
else{
$myTime = substr_replace(substr_replace($var, ' Hours, ', 2, 1), ' Minutes, ', 12, 1);
}
// work with your variable
echo  $myTime .' Seconds';

?>
0
ответ дан 14 December 2019 в 13:51
поделиться

Если Вы действительно хотите использовать встроенную функцию, возможно, для устойчивости, можно попробовать

 date_default_timezone_set('UTC'); 
 $date = strtotime($hms,0); 

и используйте любую из функций форматирования даты (date(), strftime(), и т.д.) для форматирования времени всегда, Вы желаете. Или можно использовать вывод strptime($hms,'%T'). Любой может быть излишеством для простого сценария, который Вы имеете.

0
ответ дан 14 December 2019 в 13:51
поделиться

Я отвечу с другим подходом проблемы. Мой подход должен сохранить длины в секундах. Затем завися потребности, легко представить в эти секунды как hh:mm:ss при помощи:

print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds); (для Вашего вопроса)

или искать на длине в базе данных:

SELECT * FROM videos WHERE length > 300; например, для поиска видео с длиной выше, чем 5 минут.

0
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: