合計ミリ秒数(つまり70370)があり、それを分:秒:ミリ秒、つまり00:00:0000として表示したいと思います。
PHPでこれを行うにはどうすればよいですか?
合計ミリ秒数(つまり70370)があり、それを分:秒:ミリ秒、つまり00:00:0000として表示したいと思います。
PHPでこれを行うにはどうすればよいですか?
これに日付関数を使用するというわなに陥らないでください。ここにあるのは、日付ではなく時間間隔です。単純なアプローチは、次のようなことです。
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.
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);
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);
この関数を試して、ミリ秒数を好きなように表示してください。
<?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
?>
PHPにはミリ秒をフォーマットするための組み込み関数はないと思います。数学を使用する必要があります。
マニュアルに記載されているように:
u マイクロ秒 (PHP 5.2.2 で追加) 例: 654321
date() 関数の「u」パラメータがあります
例:
if(($u/60) >= 60)
{
$u = mktime(0,($u / 360));
}
date('H:i:s',$u);