Trouver des jours entre 2 horodatages Unix en PHP

Hay, j’ai une firebase database contenant des événements. Il y a 2 champs ‘start’ et ‘end’, ceux-ci contiennent des horodatages. Lorsqu’un administrateur entre ces dates, il n’a que la possibilité de définir le jour, le mois et l’année. Nous ne traitons donc que des timbres contenant des jours, des mois, des années, pas des heures, des minutes, des secondes (les heures, les minutes et les secondes sont définies sur 0,0,0).

J’ai un événement avec l’heure de début 1262304000 et l’heure de fin 1262908800. Ceux-ci convertissent au 1er janvier 2010 et 8 janvier 2010. Comment pourrais-je obtenir tous les jours entre ces horodatages? Je veux être en mesure de retourner le 2 janvier 2010 (1262390400), le 3 janvier 2010 (1262476800) .. jusqu’au tampon final. Ces événements pourraient se répercuter sur différents mois, du 28 mai au 14 juin, par exemple.

Des idees pour faire cela?

Il vous suffit de calculer le nombre de secondes entre les deux dates, puis de diviser pour obtenir les jours:

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

Ensuite, vous pouvez utiliser une boucle for pour récupérer les dates:

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

Encore une fois, si vous ne savez pas quel horodatage est le plus petit, vous pouvez utiliser la fonction min () (deuxième argument dans strtotime).

Je pense qu’une solution rapide à ce problème consiste à soustraire le nombre de secondes en secondes de l’end_stamp jusqu’à ce que vous arriviez à start_tag.

 //1 day = 86400 seconds 

Je construirais un tableau des jours à utiliser plus tard.

EDIT (exemple)

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

Cela devrait couvrir n'importe quel laps de temps, même si c'est sur plusieurs mois.

Essaye ça:

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

J’espère que cela t’aides !

 $d1=mktime(22,0,0,1,1,2007); $d2=mktime(0,0,0,1,2,2007); echo "Hours difference = ".floor(($d2-$d1)/3600) . "
"; echo "Minutes difference = ".floor(($d2-$d1)/60) . "
"; echo "Seconds difference = " .($d2-$d1). "
"; echo "Month difference = ".floor(($d2-$d1)/2628000) . "
"; echo "Days difference = ".floor(($d2-$d1)/86400) . "
"; echo "Year difference = ".floor(($d2-$d1)/31536000) . "
";

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

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

  **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"; 

Quelque chose comme ça?

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

En passant, 1262304000 est le 31 décembre, pas le 1er janvier.

obtenir la différence de deux dates et la diviser par 86400. abs (($ date1 – $ date2) / 86400) produira le résultat souhaité

 $daysInBetween = range($startTs, $endTs, 86400); $secondDay = date('M d Y', $daysInBetween[1]); /* $thirdDay = date('M d Y', $daysInBetween[2]); ... */ 

Notez que la fonction range() est inclusive.