2011-01-15 14 views

答えて

5

これらのタイムスタンプはマイクロ秒単位です。しかし、PHPはdate()で秒単位でタイムスタンプの整数を使用するため、マイクロ秒の値を取得することはできません。

// "u" will always be printed as 000000 regardless of actual microseconds 
echo date('d-m-Y H:i:s.u', 1295076698126000/1000000); 

EDIT:あなたはまだ百万円(100万マイクロ秒= 1秒)でタイムスタンプを分割し、date()に商を渡すことで、日付の残りの部分を印刷することができますハックを、あなたこのように、回避策として別途ミリ秒と出力それを得るために手動で算術演算を実行することができます。再利用のために

$xml_timestamp = 1295076698126000; 
$seconds = $xml_timestamp/1000000; 
$microseconds = $seconds - floor($seconds); 
$seconds = floor($seconds); 

// 1 millisecond = 1000 microseconds 
// Milliseconds, because your desired output is 3 decimal places long, not 6 
$milliseconds = round($microseconds * 1000); 

$format = 'd-m-Y H:i:s.' . sprintf('%03d', $milliseconds); 
echo date($format, $seconds); 

DateTimeクラスは良いオプションです。または、カスタム関数ます。http:// UK3あなたは* * `日にエドワード・ラッドさんのコメントどおり、` DateTime`オブジェクトを() `のマニュアルページを "U" を使用することができます

function date_milliseconds($format, $timestamp = NULL) { 
    $seconds = ($timestamp === NULL) ? microtime(true) : $timestamp/1000000; 
    $microseconds = $seconds - floor($seconds); 
    $seconds = floor($seconds); 
    $milliseconds = round($microseconds * 1000); 

    $format = preg_replace('/(?<!\\\\)u/', sprintf('%03d', $milliseconds), $format); 
    return date($format, $seconds); 
} 

echo date_milliseconds('d-m-T H:i:s.u', floatval($xml_timestamp)); 
+0

注意。 php.net/manual/en/function.date.php#93891しかし、これは実際にはあまり役に立ちません。マイクロ秒のタイムスタンプを設定する簡単な方法は見当たらないからです( 'setTimestamp()'は、 intに入力します)。 –

+0

コードを動的にすることはできますか? 'echo $ timestamp * 1'は常に同じ番号を返します(2147483647):http://stackoverflow.com/questions/573692/is-the-size-of-an-array-constrained-by-the-upper- limit-of-int-2147483647 –

+0

@Kristoffer:どのバージョンのPHPを使用していますか? PHPは '$ timestamp'を浮動小数点に変換します。これは、32ビットの符号付きintの制限を超えたときです。 – BoltClock

関連する問題