2009-12-02 22 views

cevap

32

bu tarih işlevleri kullanarak tuzağına düşmeyin: HP 5,3 DateInterval nesnenin yararlanabilir! Burada sahip olduğunuz bir zaman aralığı, bir tarih değil. naif yaklaşım böyle bir şey yapmaktır:

date("h:i:s.u", $mytime/1000) 

ama

tarih fonksiyonu (kurar) tarihleri ​​için kullanıldığından, bu seferinde bu durumda bunu isteyeyim şekilde işlemez - Tek gereken Tarih/saat biçimlendirirken zaman dilimleri ve gün ışığından yararlanma, vb.

Bunun yerine, muhtemelen sadece bazı basit matematik yapmak isteyecektir:

$input = 70135; 

$uSec = $input % 1000; 
$input = floor($input/1000); 

$seconds = $input % 60; 
$input = floor($input/60); 

$minutes = $input % 60; 
$input = floor($input/60); 

// and so on, for as long as you require. 
+0

Hatalıydık, haklısınız;) ++ 1 –

+0

Yine de bir kesmek olurdu, ancak değerlerin 24 saatten az olacağından eminseniz 'gmdate() 'yi kullanabilirsiniz. – soulmerge

+0

Mükemmel! Bir milyona teşekkürler! – designvoid

1

milisaniye Tutarı istediğiniz gibi göstermek için bu fonksiyonu deneyin:

<?php 
function udate($format, $utimestamp = null) 
{ 
    if (is_null($utimestamp)) { 
     $utimestamp = microtime(true); 
    } 

    $timestamp = floor($utimestamp); 
    $milliseconds = round(($utimestamp - $timestamp) * 1000000); 

    return date(preg_replace('`(?<!\\\\)u`', sprintf("%06u", $milliseconds), $format), $timestamp); 
} 

echo udate('H:i:s.u'); // 19:40:56.78128 
echo udate('H:i:s.u', 654532123.04546); // 16:28:43.045460 
?> 

Source

+0

@Kamil sizin sayıdır - bu kuşaklar için burada bu yüzden kod inlined. –

+0

btw - Bu preg_replace'nin ne yaptığını bilmiyorum. Oldukça tuhaf görünüyor. –

+1

@Dominic - Teşekkürler. Bir dahaki sefere yapacağım. –

1

PHP biçimlendirme milisaniye için yerleşik bir işlevi olduğuna inanırım sen matematik kullanmanız gerekir . kılavuzda belirtildiği gibi

0

:

u Mikrosaniye (PHP eklenmiştir 5.2.2) Örnek: 654321

Biz tarihi() fonksiyonu

için bir 'u' parametresi

Örnek:

if(($u/60) >= 60) 
{ 
$u = mktime(0,($u/360)); 
} 
date('H:i:s',$u); 
4

Eğer P kullanıyorsanız

list($seconds, $millis) = explode('.', $milliseconds/1000); 
$range = new DateInterval("PT{$seconds}S"); 
echo $range->format('%H:%I:%S') . ':' . str_pad($millis, 3, '0', STR_PAD_LEFT); 
+0

$ saniye nasıl olur? Milyonları $ saniyeye çevirmelisin, değil mi? –

+0

@daemonfire: İşaretlemek için Thx. Şimdi çalışmalı. – soulmerge

+1

70370'i milisaniye olarak kullanırsanız 00: 00: 70: 037'yi alırsınız ... 70 saniyeyi 1 dakikaya eklememeli mi? – barfoon

1

neden sadece matematik kullanabilirsiniz date() ve biçimlendirme ile rahatsız? $ms eğer milisaniye

echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT);