2016-01-21 79 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"); 
?>