Поиск дней между 2 unix метками времени в php - PullRequest
25 голосов
/ 02 ноября 2010

Хей, у меня есть база данных с событиями.Есть 2 поля «начало» и «конец», они содержат метки времени.Когда администратор вводит эти даты, они могут только установить день, месяц и год.Таким образом, мы имеем дело только с марками, содержащими дни, месяцы, годы, а не часы, минуты, секунды (часы, минуты и секунды установлены на 0,0,0).

У меня есть событие со временем началакак 1262304000, а время окончания - как 1262908800. Они конвертируются в 1 января 2010 года и 8 января 2010 года. Как бы я получал все дни между этими временными метками?Я хочу иметь возможность вернуть 2 января 2010 года (1262390400), 3 января 2010 года (1262476800) ... до самого конца штампа.Эти события могут переходить в разные месяцы, скажем, с 28 мая по 14 июня.

Есть идеи, как это сделать?

Ответы [ 8 ]

44 голосов
/ 02 ноября 2010

Вам просто нужно рассчитать количество секунд между двумя датами, а затем разделить, чтобы получить дни:

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

Затем вы можете использовать цикл for для получения дат:

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

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

Опять же, если вы не знаете, какая временная метка является наименьшей, вы можете использовать функцию min () (второй аргумент в strtotime).

2 голосов
/ 02 ноября 2010

Попробуйте это:

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

Надеюсь, это поможет!

2 голосов
/ 02 ноября 2010

Я думаю, что быстрым обходным путем для этого является вычитание количества дней в секундах из конечной отметки, пока вы не доберетесь до начального тега.позже

1 голос
/ 25 сентября 2013
    **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";
1 голос
/ 02 ноября 2010
$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/

Обратите внимание, что функция range() включена.

1 голос
/ 02 ноября 2010
$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

0 голосов
/ 02 ноября 2010

получите разницу двух дат и разделите ее на 86400. abs (($ date1 - $ date2) / 86400) даст необходимый результат

0 голосов
/ 02 ноября 2010

Как то так?

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

Кстати, 1262304000 - это 31 декабря, а не 1 января.

...