代码之家  ›  专栏  ›  技术社区  ›  dotty

在php中查找两个unix时间戳之间的天数

  •  25
  • dotty  · 技术社区  · 14 年前

    嘿,我有一个保存事件的数据库。有两个字段“开始”和“结束”,它们包含时间戳。当管理员输入这些日期时,他们只能设置日期、月份、年份。所以我们只处理包含天、月、年的邮票,而不是小时、分钟、秒(小时、分钟和秒设置为0,0,0)。

    我有一个活动,开始时间是1262304000,结束时间是1262908800。这些转换为2010年1月1日和2010年1月8日。我怎么才能得到这些时间戳之间的所有日子?我想能够返回2010年1月2日(1262390400),2010年1月3日(1262476800)。。一直到最后一刻。这些事件可能会跨越到不同的月份,比如5月28日到6月14日。

    8 回复  |  直到 14 年前
        1
  •  45
  •   Vincent Savard Midhun    14 年前

    你只需要计算两个日期之间的秒数,然后除以得到天数:

    $numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;
    

    $numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;
    
    for ($i = 1; $i < $numDays; $i++) {
        echo date('Y m d', strtotime("+{$i} day", $smallestTimestamp)) . '<br />';
    }
    

    同样,如果不知道哪个时间戳最小,可以使用min()函数(strotime中的第二个参数)。

        2
  •  2
  •   Etienne Marais    14 年前

    我认为一个快速的解决方法是从结束标记减去一天的秒数,直到到达开始标记。

    //1 day = 86400 seconds
    

    我会建立一个数组,供以后使用。

    编辑(示例)

    $difference = 86400;
    $days = array();
    while ( $start_time < $end_time )
    {
        $days[] = date('M j Y', $end_time);
    
        $end_time -= $difference;
    }
    

        3
  •  2
  •   Valentin Flachsel    14 年前

    试试这个:

    while($date_start <= $date_end) {
        echo date('M d Y', $date_start) . '<br>';
        $date_start = $date_start + 86400;
    }
    

    希望这有帮助!

        4
  •  1
  •   zod    14 年前
    $d1=mktime(22,0,0,1,1,2007);
    $d2=mktime(0,0,0,1,2,2007);
    echo "Hours difference = ".floor(($d2-$d1)/3600) . "<br>";
    echo "Minutes difference = ".floor(($d2-$d1)/60) . "<br>";
    echo "Seconds difference = " .($d2-$d1). "<br>";
    
    
    echo "Month difference = ".floor(($d2-$d1)/2628000) . "<br>";
    echo "Days difference = ".floor(($d2-$d1)/86400) . "<br>";
    echo "Year difference = ".floor(($d2-$d1)/31536000) . "<br>";
    

    http://www.plus2net.com/php_tutorial/date-diff.php

    http://www.phpf1.com/tutorial/php-date-difference.html

        5
  •  1
  •   Halil Özgür    14 年前
    $daysInBetween = range($startTs, $endTs, 86400);
    $secondDay = date('M d Y', $daysInBetween[1]);
    /*
    $thirdDay = date('M d Y', $daysInBetween[2]);
    ...
    */
    

    请注意 range()

        6
  •  1
  •   SaNdY    11 年前
        **This is a very simple code for find days hours minutes and seconds in php**
    
        $dbDate = strtotime("".$yourbdDate.""); // Database date
        $endDate = time();    // current time
        $diff = $endDate - $dbDate; /// diffrence
    
        $days = floor($diff/86400);  ///  number of days 
        $hours = floor(($diff-$days*86400)/(60 * 60));  ////  number of hours
        $min = floor(($diff-($days*86400+$hours*3600))/60);///// numbers of minute
    
    
        $second = $diff - ($days*86400+$hours*3600+$min*60); //// secondes
    
        if($days > 0) echo $days." Days ago";
        elseif($hours > 0) echo $hours." Hours ago";
        elseif($min > 0) echo $min." Minute ago";
        else echo "Just second ago";
    
        7
  •  0
  •   netcoder    14 年前

    像这样的?

    $day = $start;
    while ($day < $end) {
            $day += 86400;
            echo $day.' '.date('Y-m-d', $day).PHP_EOL;
    }
    

    顺便说一下,1262304000是12月31日,不是1月1日。

        8
  •  0
  •   bkilinc    14 年前