2013-09-30 57 views
1

我有兩個ASCII日期時間標記。最終,我想要以秒和毫秒爲單位獲得差異。我試過使用DateTime類以及Date()函數。這兩個似乎都會縮短微秒,儘管日期格式的文檔說該類保留了它。PHP使用微秒將ASCII日期/時間標記轉換爲Unix時間

這裏是我到目前爲止有:

<?php 
// test.datetimediff.php 

echo "<pre>\n"; 

$tz = new DateTimeZone('America/Toronto'); 
echo print_r($tz, true) . "<br>\n"; 

/* 
$dt1 = date('Y-m-d H:i:s.u', '2013-09-30 13:06:56.944'); 
$dt2 = date('Y-m-d H:i:s.u', '2013-09-30 13:06:56.979'); 
*/ 

$dt1 = new Datetime('2013-09-30 13:06:56.944', $tz); 
$dt2 = new Datetime('2013-09-30 13:06:56.979', $tz); 

echo print_r($dt1, true) . "<br>\n"; 
echo print_r($dt2, true) . "<br>\n"; 

$interval = $dt1->diff($dt2); 

$seconds = $interval->format('%s'); 

echo 'seconds: ' . $seconds . "<br>\n"; 

echo "</pre>\n" . "<br>\n"; 
+0

ASCII是一個字符編碼方案,不知道什麼是「ASCII日期」是 – 2013-09-30 19:28:04

+2

相當肯定的DateTime不佔幾分之一秒。 – Sammitch

+1

@Sammitch是對的 - https://bugs.php.net/bug.php?id=52519 –

回答

0

這是一種可能的解決方法。不是最漂亮的,但它的工作:

<?php 
// test.datetimediff.php 

echo "<pre>\n"; 

$tz = new DateTimeZone('America/Toronto'); 
echo print_r($tz, true) . "<br>\n"; 

/* 
$dt1 = date('Y-m-d H:i:s.u', '2013-09-30 13:06:56.944'); 
$dt2 = date('Y-m-d H:i:s.u', '2013-09-30 13:06:56.979'); 
*/ 

$dt1 = new Datetime('2013-09-30 13:06:56.944', $tz); 
$dt2 = new Datetime('2013-09-30 13:06:56.979', $tz); 

echo print_r($dt1, true) . "<br>\n"; 
echo print_r($dt2, true) . "<br>\n"; 

$interval = $dt1->diff($dt2); 

$seconds = (int) $interval->format('%s'); 

// Get microseconds from both start and end date 
$us1 = $dt1->format('u'); 
$us2 = $dt2->format('u'); 

// Compute the microsecond difference and add it to the seconds 
$seconds += abs($us2 - $us1)/1000000; 

echo 'seconds: ' . $seconds . "<br>\n"; 

echo "</pre>\n" . "<br>\n"; 
+0

您如何從ISO 8601日期到$ interval? – NotoriousWebmaster

+0

@NotoriousWebmaster答案中的代碼意味着可以將代碼集成到代碼中以添加微秒。我已經更新了答案,所以你可以看到它會發生什麼 – Bogdan

1

找不到這將需要microtime中考慮的功能。所以我把它轉換成了整數秒,並且自己在毫秒級上。以下是我設置的功能:

/* 
expects $datetime in format yyyy-mm-ddThh:mm:ss.9999 
*/ 
function strtomtime($datetime) { 

    $dt1 = strtotime($datetime); 
    $pos = strrpos($datetime, '.'); 
    $mtime = $dt1 + floatval(substr($datetime, $pos)); 
    return $mtime; 
} 
相關問題