Hãy thử thay thế bằng DateTime.
này cần một chút của một workaround vì DateInterval
(được trả về bởi DateTime::diff()
) không tính toán micro, vì vậy bạn cần phải điều này bằng tay
$pageTime = new DateTime("2012-04-23T16:08:14.1 - 5 hours");
$rowTime = new DateTime("2012-04-23T16:08:16.9 - 5 hours");
// the difference through one million to get micro seconds
$uDiff = abs($pageTime->format('u')-$rowTime->format('u'))/(1000 * 1000);
$diff = $pageTime->diff($rowTime);
echo $diff->format('%s')-$uDiff;
tôi luôn khuyên DateTime
vì tính linh hoạt của nó, bạn nên xem xét nó
EDIT
Đối ngược compability để PHP 5.2 phải mất phương pháp tương tự như f hoặc mili giây:
$pageTime = new DateTime("2012-04-23T16:08:14.1 - 5 hours");
$rowTime = new DateTime("2012-04-23T16:08:16.9 - 5 hours");
// the difference through one million to get micro seconds
$uDiff = abs($pageTime->format('u')-$rowTime->format('u'))/(1000 * 1000);
$pageTimeSeconds = $pageTime->format('s');
$rowTimeSeconds = $rowTime->format('s');
if ($pageTimeSeconds + $rowTimeSeconds > 60) {
$sDiff = ($rowTimeSeconds + $pageTimeSeconds)-60;
} else {
$sDiff = $pageTimeSeconds - $rowTimeSeconds;
}
if ($sDiff < 0) {
echo abs($sDiff) + $uDiff;
} else {
// for the edge(?) case if $dt2 was smaller than $dt
echo abs($sDiff - $uDiff);
}
Nguồn
2012-04-23 22:29:23
darn ... điều này có vẻ hứa hẹn nhưng nó yêu cầu 5.3+ và tôi là 5.2 và tôi không có quyền kiểm soát nâng cấp: (+1 mặc dù – slinkhi
Đó là vì 'DateTime :: diff()'. Điều này có nghĩa là bạn sẽ cần phải làm điều đó bằng tay quá, xem chỉnh sửa của tôi :). –
Tôi thấy ... nói chung, điều này có vẻ như nó giúp trích xuất dữ liệu dễ dàng hơn (như trái ngược với sử dụng regex) nhưng tôi nghĩ rằng toán/logic của bạn là tắt. Ví dụ: nếu tôi có '$ pageTime = new DateTime (" 2012-04-23T16: 08: 14.662-05: 00 "); $ rowTime = new DateTime ("2012-04-23T16: 08: 19.954-05: 00"); 'Tôi sẽ nhận được '5.292' nhưng nó xuất ra' 4.708'. Ngoài ra, mã của bạn chỉ giải quyết một sự khác biệt về thời gian giữa giây và micro giây. Điều gì xảy ra nếu bạn bắt đầu với '2012-04-23T16: 08: 59.9-05: 00' và kết thúc bằng' 2012-04-23T16: 09: 00.1-05: 00' bạn sẽ nhận được '0.2' nhưng mã của bạn cho tôi '58.2' .. (tiếp theo) – slinkhi