Поиск дней между 2 метками времени unix в php
Хей, у меня есть база данных событий. Есть 2 поля 'начало' и 'конец', они содержат метки времени. Когда администратор вводит эти даты, у них есть только возможность установить день,месяц,год. Таким образом,мы имеем дело только с марками,содержащими дни, месяцы,годы,а не часы,минуты, секунды (часы, минуты и секунды установлены в 0,0,0).
У меня есть событие со временем начала как 1262304000 и временем окончания как 1262908800. Они преобразуются в 1 января 2010 года и 8 января 2010 года. Как я получу все дни между этими отметками? Я хочу иметь возможность вернуться 2 января 2010 (1262390400), 3 января 2010 (1262476800) .. до самого конца. Эти события могут перейти в разные месяцы, скажем, с 28 мая по 14 июня.
есть идеи, как это сделать?
8 ответов
вам просто нужно рассчитать количество секунд между двумя датами, а затем разделить, чтобы получить дни:
$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).
Я думаю, что быстрый обходной путь для этого состоит в том, чтобы вычесть количество дней, стоящих секунд от end_stamp, пока вы не доберетесь до start_tag.
//1 day = 86400 seconds
Я бы построил массив дней для использования позже.
изменить (пример)
$difference = 86400;
$days = array();
while ( $start_time < $end_time )
{
$days[] = date('M j Y', $end_time);
$end_time -= $difference;
}
Это должно охватывать любые временные рамки, даже если его в течение нескольких месяцев.
попробуйте это:
while($date_start <= $date_end) {
echo date('M d Y', $date_start) . '<br>';
$date_start = $date_start + 86400;
}
надеюсь, что это помогает !
$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>";
**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";
что-то вроде этого?
$day = $start;
while ($day < $end) {
$day += 86400;
echo $day.' '.date('Y-m-d', $day).PHP_EOL;
}
кстати, 1262304000-это 31 декабря, а не 1 января.
получите разницу двух дат и разделите ее на 86400. abs (($date1 - $date2) / 86400) даст необходимый результат
$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/
отметим, что