2011-01-15 28 views

回答

5

那些时间戳以微秒为单位。但是,由于PHP在date()秒内使用整数表示时间戳,因此您将无法获得微秒值。您仍然能够通过一百万(100万微秒= 1秒)除​​以时间戳,并通过该商数date()打印的日期休息:

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

编辑:哈克,但你可以进行手动算术分别获得毫秒,其输出作为解决办法,就像这样:

$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类是一个不错的选择。或者,自定义函数:

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

请注意,您可以* *用 “u” 用'DateTime'对象,按照爱德华陆克文的评论对'日起()'手动页面:http:// UK3。 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超过32位有符号整数限制时,PHP会将'$ timestamp'转换为浮点数。 – BoltClock