2012-06-30 3 views
1

Как получить точные даты за последние 7 дней, включая сегодня, в пользовательском формате (дд/мм)?Получить даты последних 7 дней в массиве в пользовательском формате

В результате массив я хотел бы получить что-то подобное (даты являются только примерами):

1=>11/2 (today minus 7 days) 
2=>12/2 (today minus 6 days) 
... 
7=>17/2 (today) 
+0

И что ты пробовал? – sachleen

ответ

10
function getLastNDays($days, $format = 'd/m'){ 
    $m = date("m"); $de= date("d"); $y= date("Y"); 
    $dateArray = array(); 
    for($i=0; $i<=$days-1; $i++){ 
     $dateArray[] = '"' . date($format, mktime(0,0,0,$m,($de-$i),$y)) . '"'; 
    } 
    return array_reverse($dateArray); 
} 

Использование:

$arr = getLastNDays(7); 

или

$arr = getLastNDays(7, 'd/m/Y'); 
+0

Работает отлично –

2

time() дает текущую метку времени.
86400 секунд - один день (60 * 60 * 24).
date() дает пользовательскую строку даты.

for ($iDay = 6; $iDay >= 0; $iDay--) { 
    $aDays[7 - $iDay] = date('d/m', time() - $iDay * 86400); 
} 

Также см. this example.

Если вы не хотите, ведущие нули, используйте 'j/n' в custom date format parameter:

for ($iDay = 6; $iDay >= 0; $iDay--) { 
    $aDays[7 - $iDay] = date('j/n', time() - $iDay * 86400); 
} 

Также см этот updated example.

=== UPDATE ===

@ идея Дагона использовать strtotime(), чтобы получить временную метку велика. Здесь лучшее решение:

for ($iDay = 6; $iDay >= 0; $iDay--) { 
    $aDays[7 - $iDay] = date('j/n', strtotime("-" . $iDay . " day")); 
} 

И an example.

+0

не все фейсы 86400 длиннее лучше использовать strtotime («- 1 день») –

+0

есть секунды прыжка, а также прыжки дней –

+0

@ Дагон: Да, ваше решение более точное. Но високосные дни не имеют значения для примера выше, а [прыжок секунд] (http://en.wikipedia.org/wiki/Leap_second) можно пренебречь из-за их редкости. – scessor

5

Вы можете комбинировать дату 2 функции() и StrToTime(). например:

echo date("Y-m-d", strtotime("7 days ago")); 

Try:

for ($i=0; $i<7; $i++) 
{ 
    echo date("d/m", strtotime($i." days ago")).'<br />'; 
} 

Вы должны быть в состоянии работать, как получить их в правильном порядке и в массив :)

Надежда, что помогает

+0

+1, простейшее решение всегда лучшее решение – Wh1T3h4Ck5

Смежные вопросы