2016-01-21 80 views
1

首先,我很抱歉我的英語。我來自德國。以日期格式卡住

現在我的問題: 我有一個多個數組,其中包含一些日期。我必須過濾每個IP的第一個和最後一個日期,因爲我需要兩個日期的差異來知道用戶在我的網站上有多少時間。 我做到了,得到了我需要的一切。下面是我的代碼輸出的一部分:

$ ip_with_dates:

Array 
(
    [0] => Array 
     (
      [ip] => 72.xx.xx.xx 
      [first_date] => 2015-10-12 00:10:15 
      [last_date] => 2015-10-12 01:10:51 
     ) 

[1] => Array 
     (
      [ip] => 85.xx.xx.xx 
      [first_date] => 2015-10-12 00:10:19 
      [last_date] => 2015-10-12 01:10:56 
     ) 

我試圖讓這兩個日期之間的時間:

$visit_lenght = []; 
    foreach($ip_with_date as $key => $val){ 
     $date1 = new DateTime($val['first_date']); 
     $date2 = new DateTime($val['last_date']); 
     $interval = $date1->diff($date2)->format('%h %m %s'); 
     $visit_lenght[] = $interval; 
    } 

給我帶來這樣的輸出:

Array 
(
    [0] => 1 36 
    [1] => 1 37 
    [2] => 0 3 
    [3] => 0 9 
) 

很好,但這是不好的工作。我需要時間在幾秒鐘內不在H:m:s

但我真的不現在如何。這是我真正與之搏鬥的項目的一部分。也許有人可以幫我解決這個問題。

我正在和laravel合作。普通的PHP會讓它變得如此,但如果有人知道laravel中的解決方案,那也會很好!

感謝您的任何幫助!

回答

1

要獲得時間差異在您需要將您的datetime對象轉換爲時間戳秒:

$visit_lenght = []; 
foreach($ip_with_date as $key => $val){ 
    $date1 = new DateTime($val['first_date']); 
    $date2 = new DateTime($val['last_date']); 
    $interval = $date1->getTimestamp() - $date2->getTimestamp() 
    $visit_lenght[] = $interval; 
} 
+0

以及我試過,但輸出的是有點奇怪.. ---- [0] => 3636 [1] => 3637 [2] => 3 [3] => 9 ) – ItzMe42

+0

標記答案已被接受,所以每個人都可以看到它是正確的:-) – aeryaguzov

0

嘗試這種方式(一般/基本方式)

$visit_lenght = []; 
    foreach($ip_with_date as $key => $val){ 
     $date1 = strtotime($val['first_date']); 
     $date2 = strtotime($val['last_date']); 
     //$interval = $date1->diff($date2)->format('%h %m %s'); 
$interval = $date2 - $date1; 
     $visit_lenght[] = $interval; 
    } 
0

你可以這樣做: - > format('Ymd H:i:s')

0

DateTime()類的PHP,找到時間之間的差異是非常簡單的。下面是
的一個實例:

<?php 
    $ip = "xxxx-xxx-xxx"; 
    $t1 = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-12 00:10:15'); 
    $t2 = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-12 01:10:51'); 

    echo "User from IP {$ip} spent " . $t1->diff($t2)->format("%h hours, %i minutes and %s seconds"); 
?>