web-dev-qa-db-fra.com

Trouver des jours entre 2 timestamps Unix en php

Hay, j'ai une base de données contenant des événements. Il y a 2 champs 'début' et 'fin', ils 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 et non des heures, des minutes, des secondes (les heures, les minutes et les secondes sont réglées sur 0,0,0).

J'ai un événement dont l'heure de début est 1262304000 et l'heure de fin, 1262908800. Ceux-ci sont convertis du 1er janvier 2010 au 8 janvier 2010. Comment puis-je obtenir tous les jours entre ces horodatages? Je veux pouvoir retourner le 2 janvier 2010 (1262390400), le 3 janvier 2010 (1262476800) .. jusqu'au tampon final. Ces événements pourraient s’étendre sur plusieurs mois, du 28 mai au 14 juin.

Des idees pour faire cela?

25
dotty

Il suffit de calculer le nombre de secondes entre les deux dates, puis 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)) . '<br />';
}

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

43
Vincent Savard

Je pense qu’une solution rapide pour remédier à ce problème consiste à soustraire le nombre de jours en secondes à partir du tampon final jusqu’à ce que vous obteniez le marqueur 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.

2
Etienne Marais

Essaye ça:

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

J'espère que cela t'aides !

2
$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

1
zod
    **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
sandy
$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.

0
Halil Özgür

Quelque chose comme ça?

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

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

0
netcoder

obtenez la différence de deux dates et divisez-la par 86400. abs (($ date1 - $ date2)/86400) produira le résultat souhaité

0
bkilinc