Создать массив последних 30 дней с помощью PHP - PullRequest
9 голосов
/ 03 декабря 2008

Я пытаюсь создать массив, начиная с сегодняшнего дня и возвращаясь за последние 30 дней с PHP, и у меня возникли проблемы. Я могу оценить, но я не знаю хорошего способа сделать это и принять во внимание количество дней в предыдущем месяце и т.д. У кого-нибудь есть хорошее решение? Я не могу подобраться близко, но мне нужно убедиться, что он на 100% точен.

Ответы [ 5 ]

30 голосов
/ 03 декабря 2008

Попробуйте это:

<?php    
$d = array();
for($i = 0; $i < 30; $i++) 
    $d[] = date("d", strtotime('-'. $i .' days'));
?>
0 голосов
/ 22 мая 2019

Вот предварительный последний фрагмент для того же самого,

$today     = new DateTime(); // today
$begin     = $today->sub(new DateInterval('P30D')); //created 30 days interval back
$end       = new DateTime();
$end       = $end->modify('+1 day'); // interval generates upto last day
$interval  = new DateInterval('P1D'); // 1d interval range
$daterange = new DatePeriod($begin, $interval, $end); // it always runs forwards in date
foreach ($daterange as $date) { // date object
    $d[] = $date->format("Y-m-d"); // your date
}
print_r($d);

Рабочая демо .

Официальный Документ .

0 голосов
/ 19 мая 2017

Для тех, кто хочет показать продажи прошлых Х дней,
Как задано в этом закрытом вопросе (https://stackoverflow.com/questions/11193191/how-to-get-last-7-days-using-php#=),, это сработало для меня.

  $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; ?> 

 } 

Прежде чем злиться: Я разместил этот ответ здесь, чтобы помочь кому-то, кто был направлен сюда от этого вопроса. Не могу ответить там: (

0 голосов
/ 13 апреля 2016
$d = array();
for($i = 0; $i < 30; $i++)
    array_unshift($d,strtotime('-'. $i .' days'));
0 голосов
/ 03 декабря 2008

Вы можете использовать время для контроля дней:

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);
}

Теперь в цикле for вы можете использовать переменную $ the_date для любых целей. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...