2008-12-03 15 views
9

Estoy intentando crear una matriz a partir de hoy y volver los últimos 30 días con PHP y estoy teniendo problemas. Puedo estimar pero no conozco una buena manera de hacerlo y teniendo en cuenta la cantidad de días del mes anterior, etc. ¿Alguien tiene una buena solución? No puedo acercarme, pero necesito asegurarme de que sea 100% exacto.Crear una matriz de los últimos 30 días con PHP

Respuesta

28

Prueba esto:

<?php  
$d = array(); 
for($i = 0; $i < 30; $i++) 
    $d[] = date("d", strtotime('-'. $i .' days')); 
?> 
+0

Creo que quería decir que la fecha se asignará a $ d [i], no $ d []. – Matt

+1

Matt: No $ d [] es mejor. – OIS

+0

Para los que no Sabes, lo que '$ d []' hace aquí es agregar resultado al final de la matriz. – Ren

0

Puede usar el tiempo para controlar los días:

for ($i = 0; $i < 30; $i++) 
{ 
    $timestamp = time(); 
    $tm = 86400 * $i; // 60 * 60 * 24 = 86400 = 1 day in seconds 
    $tm = $timestamp - $tm; 

    $the_date = date("m/d/Y", $tm); 
} 

Ahora, dentro del bucle for puede utilizar la variable $ the_date con qué propósitos es posible que desee . :-)

+0

Pedrin, tenga cuidado con este método usando el tiempo. Solía ​​hacer esto, luego noté que no se calculará correctamente en ciertos momentos relacionados con el horario de ahorro de luz diurna. En su lugar, aconsejaría utilizar la función strtotime. -Matt – Matt

+0

te falta un $ antes de i ++ ... gracias por el bucle útil :) –

0
$d = array(); 
for($i = 0; $i < 30; $i++) 
    array_unshift($d,strtotime('-'. $i .' days')); 
0

Para aquellos que quieren mostrar las ventas de los últimos X días,
As asked in this closed question (https://stackoverflow.com/questions/11193191/how-to-get-last-7-days-using-php#=), esto funcionó para mí.

$sales = Sale::find_all();//the sales object or array 

    for($i=0; $i<7; $i++){ 
    $sale_sum = 0; //sum of sale initial 
    if($i==0){ 
    $day = strtotime("today"); 
    } else { 
    $day = strtotime("$i days ago"); 
    } 
    $thisDayInWords = strftime("%A", $day); 

    foreach($sales as $sale){ 
    $date = strtotime($sale->date_of_sale)); //May 30th 2018 10:00:00 AM 
    $dateInWords = strftime("%A", $date); 

    if($dateInWords == $thisDayInWords){ 
     $sale_sum += $sale->total_sale;//add only sales of this date... or whatever 
    } 
    } 
    //display the results of each day's sale 
    echo $thisDayInWords."-".$sale_sum; ?> 

} 

Antes te enojas: coloqué esta respuesta aquí para ayudar a alguien que se dirige aquí a partir de que se trate. No pude responder allí :(

Cuestiones relacionadas