17

合計ミリ秒数(つまり70370)があり、それを分:秒:ミリ秒、つまり00:00:0000として表示したいと思います。

PHPでこれを行うにはどうすればよいですか?

4

8 に答える 8

37

これに日付関数を使用するというわなに陥らないでください。ここにあるのは、日付ではなく時間間隔です。単純なアプローチは、次のようなことです。

date("H:i:s.u", $milliseconds / 1000)

しかし、日付関数は (あえぎ!) 日付に使用されるため、この状況で希望する方法で時間を処理しません。日付/時刻をフォーマットするときに、タイムゾーンや夏時間などを考慮に入れます。

代わりに、単純な計算をしたいだけかもしれません:

$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.
于 2009-12-02T16:25:01.897 に答える
5

PHP 5.3 を使用している場合は、DateIntervalオブジェクトを利用できます。

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);
于 2009-12-02T16:16:16.620 に答える
3

why bother with date() and formatting when you can just use math ? if $ms is your number of milliseconds

echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT);
于 2009-12-02T16:48:24.883 に答える
1

この関数を試して、ミリ秒数を好きなように表示してください。

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

ソース

于 2009-12-02T16:03:37.537 に答える
1

PHPにはミリ秒をフォーマットするための組み込み関数はないと思います。数学を使用する必要があります。

于 2009-12-02T16:04:05.477 に答える
0

マニュアルに記載されているように:

u マイクロ秒 (PHP 5.2.2 で追加) 例: 654321

date() 関数の「u」パラメータがあります

例:

if(($u/60) >= 60)
{
$u = mktime(0,($u / 360));
}
date('H:i:s',$u);
于 2009-12-02T16:13:24.737 に答える