1
如何使用PHP的date()
函數使用以下16位數時間戳(來自XML文件)?帶有PHP日期()函數的16位數時間戳
1295076698126000 // 15-01-2011 08:31:38.126
1286697695521000 // 10-10-2010 10:01:35.521
如何使用PHP的date()
函數使用以下16位數時間戳(來自XML文件)?帶有PHP日期()函數的16位數時間戳
1295076698126000 // 15-01-2011 08:31:38.126
1286697695521000 // 10-10-2010 10:01:35.521
那些時間戳以微秒爲單位。但是,由於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));
請注意,您可以* *用 「u」 用'DateTime'對象,按照愛德華陸克文的評論對'日起()'手動頁面:http:// UK3。 php.net/manual/en/function.date.php#93891但是這實際上並不是非常有用,因爲我看不到一個簡單的方法來設置一個微秒的時間戳('setTimestamp()'似乎投射輸入到int)。 –
你可以讓代碼動態嗎? 'echo $ timestamp * 1'總是給出相同的數字(2147483647),請參閱:http://stackoverflow.com/questions/573692/is-the-size-of-an-array-constrained-by-the-upper- limit-of-int-2147483647 –
@Kristoffer:你在什麼版本的PHP?當PHP超過32位有符號整數限制時,PHP會將'$ timestamp'轉換爲浮點數。 – BoltClock