Nasıl PHP saat, dakika, saniye 00:00:00 dönüştürebilirim?

10 Cevap php

MM: SS biçiminde Ben HH depolanan video süreleri var. Ben HH saat DD dakika, SS saniye olarak görüntülemek istiyorum. O 1'den az ise o saat göstermek olmamalıdır.

Ne iyi yaklaşım olacaktır?

10 Cevap

bölünmüş kullanmayı deneyin

list($hh,$mm,$ss)= split(':',$duration);

Bu böyle bir şey?

$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';

Bir küçük değişiklik olabilir:

$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";

Oldukça basit:

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

Bu, sadece eğer varsa saat veya dakika görüntülemek ve saat, dakika, ya da her ikisi de varsa bir "ve" saniye önce görüntülemek için ekler olacaktır. Eğer gerçekten fantezi olsun istedim, dakika ve saniye için, uygun aynen olduğu gibi "saat" vs "saat" göstermek için bazı kod ekleyebilirsiniz.

Php sadece iyi vakit işlediğinde neden regex veya patlar ile rahatsız?

$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);

Yararı (am / pm, saat dilimini ayarlamaları, ekleme / çıkarma, vb dahil) ancak sizin gibi zamanını yeniden biçimlendirmek olabilir.

Daha açık, farklı işlevler ve yeni başlayanlar için adım daha adım İşte farklı bir şekilde. o da 1 saat ve kaç saat kolları ... Eğer 0 dakika ve 0 saniye işlemek için aynı mantığı kullanabilirsiniz deneyebilirsiniz.

<?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';

?>

Eğer gerçekten, belki de sağlamlık için, yerleşik bir işlevi kullanmak istiyorsanız, date_default_timezone_set ('UTC') deneyebilirsiniz; $ Tarih = strtotime ($ hms, 0); ve istediğiniz herhangi bir şekilde zaman biçimlendirmek için tarih biçimlendirme fonksiyonları herhangi bir (tarih (), strftime (), vb) kullanın. Yoksa strptime çıktısını ($ hms, '% T') kullanabilirsiniz. Ya sahip Basit bir senaryo için overkill olabilir.

Ben sorunun farklı bir yaklaşımla cevap olacak. Benim yaklaşım saniye uzunlukları depolamak için. Sonra ihtiyaçları bağlı olarak, ss olarak bu saniye işlemek için kolaydır: mm: ss kullanılarak:

print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds); (Sorunuza)

veya bir veritabanında uzunluğuna aramak için:

SELECT * FROM videos WHERE length > 300;, örneğin, 5 dakika daha yüksek olan bir uzunluğa sahip bir video aramak için kullanılır.

explode () Hercai Menekşe içindir. Bu bir iş regular expressions!

<?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");
}

Tamamen denenmemiş, ama böyle bir şey çalışmak gerektiğini. Bu kod saat fragmanı always iki basamak (örneğin, üç saatlik video olurdu 03:00:00 yerine 3:00:00) olacağını varsayar.

EDIT: Geriye dönüp bakıldığında, bu düzenli ifadeler kullanarak muhtemelen aşırı mühendislik bir durumdur; ) gibi iyi ve belki de bu durumda daha hızlı olması iş yapacak (patlayabilir. Ama ben soruyu okurken akla gelen ilk yöntem oldu.

PHP saat, dakika ve saniye 00:00:00 dönüştürme gerçekten çok kolay.

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