2010-11-02 10 views
24

Hay, tengo una base de datos que contiene eventos. Hay 2 campos 'inicio' y 'final', estos contienen marcas de tiempo. Cuando un administrador ingresa a estas fechas, solo tiene la capacidad de establecer el día, mes y año. Por lo tanto, solo se trata de sellos que contienen días, meses, años, no horas, minutos, segundos (horas, minutos y segundos están configurados en 0,0,0).Encontrar días entre 2 marcas de tiempo de unix en php

Tengo un evento con la hora de inicio como 1262304000 y la hora de finalización como 1262908800. Estos se convierten al 1 de enero de 2010 y al 8 de enero de 2010. ¿Cómo obtendré todos los días entre estas marcas de tiempo? Quiero poder devolver el 2 de enero de 2010 (1262390400), el 3 de enero de 2010 (1262476800) .. hasta el final. Estos eventos podrían pasar a diferentes meses, por ejemplo, del 28 de mayo al 14 de junio.

¿Alguna idea de cómo hacer esto?

+0

posible duplicado de [cómo encontrar las fechas entre dos fechas especificadas] (http: // stackoverflow.com/questions/2736784/how-to-find-the-dates-between-two-dates-specified) – Gordon

+5

Todas estas soluciones que se ajustan en 86400 fallarán cuando las fechas abarquen el cambio de horario de verano –

+0

Mark Baker> Ese es el problema con las marcas de tiempo de Unix . Usar la clase DateTime puede ser más apropiado, aunque no verifiqué si podíamos hacer esto fácilmente. –

Respuesta

37

Sólo hay que calcular el número de segundos entre las dos fechas, y se divide para obtener días:

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

A continuación, se puede utilizar un bucle para recuperar las fechas:

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

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

De nuevo, si no sabe qué fecha y hora es la más pequeña, puede usar la función min() (segundo argumento en strtotime).

+0

¿Hay alguna manera de modificar esto para que no importe en qué dirección estar? – dotty

+1

Sí, use la función abs() en todo. –

+1

Esto le daría cuántos días hay entre las dos fechas, pero no día, mes ni año. –

2

Creo que una solución rápida para esto es restar la cantidad de días de segundos del end_stamp hasta que llegue a la etiqueta start_tag.

//1 day = 86400 seconds 

Construiría una matriz de los días para usar más adelante.

EDITAR (ejemplo)

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

    $end_time -= $difference; 
} 

Esto debería cubrir cualquier período de tiempo, incluso si hay más de un puñado de meses.

2

Prueba esto:

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

Espero que esto ayude!

0

¿Algo como esto?

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

Por cierto, es 1262304000 Dic 31, Ene 1. No

+0

Devolverá días - 1. Debe usar el operador '<='. –

+0

Dijo entre, así que supuse que era exclusivamente. – netcoder

+0

¡Ah, de hecho! Leí mal la pregunta, mi mal. –

0

obtener la diferencia de dos fechas y se divide por 86400. abs ((fecha1 $ - $ fecha2)/86400) producirá el resultado sea necesario

1
$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
$daysInBetween = range($startTs, $endTs, 86400); 
$secondDay = date('M d Y', $daysInBetween[1]); 
/* 
$thirdDay = date('M d Y', $daysInBetween[2]); 
... 
*/ 

Tenga en cuenta que la función range() es inclusiva.

1
**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"; 
Cuestiones relacionadas