генерация дат предыдущих семи дней в php - PullRequest
2 голосов
/ 26 февраля 2010

Мне нужна помощь в определении дат и дней последних семи-десяти дней по отношению к сегодняшнему дню Как создать точную временную метку, которая может учитывать изменение недели, месяца и года?

Ответы [ 5 ]

3 голосов
/ 26 февраля 2010

Самый простой способ - получить метку времени, соответствующую сегодняшнему дню, используя функцию time(); и 7 раз удаляют 1 день для этой отметки времени, каждый из которых повторяет дату, соответствующую этой отметке времени:

$timestamp = time();
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $timestamp) . '<br />';
    $timestamp -= 24 * 3600;
}

Что даст вам этот вывод:

2010-02-25
2010-02-24
2010-02-23
2010-02-22
2010-02-21
2010-02-20
2010-02-19

Поскольку отметка времени представляет собой только количество секунд с момента 1970-01-01, вычитание одного дня из отметки времени означает вычитание 24*3600 секунд.


Редактировать после комментариев:

Для изменений месяца и недели это все равно будет работать: один день все еще равен 24 * 3600 секундам.

Например, если вы тестируете использование этой строки вместо первой, которую я разместил в моем первом примере:

$timestamp = strtotime('2010-02-03');

Вы получите этот вывод:

2010-02-03
2010-02-02
2010-02-01
2010-01-31
2010-01-30
2010-01-29
2010-01-28

Изменился месяц штрафа.


Для високосных лет, если я тестирую, используя это:

$timestamp = strtotime('2008-03-03');

Я получаю:

2008-03-03
2008-03-02
2008-03-01
2008-02-29
2008-02-28
2008-02-27
2008-02-26

Что выглядит хорошо, поскольку в феврале 2008 года было 29 дней.

А если я проверю с:

$timestamp = strtotime('2009-03-03');

Я получаю:

2009-03-03
2009-03-02
2009-03-01
2009-02-28
2009-02-27
2009-02-26
2009-02-25

Что тоже хорошо выглядит.

2 голосов
/ 26 февраля 2010

Если вам посчастливится поиграть с PHP 5.3 (почему бы и нет?), Классы DateTime / Interval / Period также будут прийти исключительно полезно. В следующем примере печатаются даты за предыдущие 7 дней (вместе с сегодняшним днем) относительно сегодняшнего дня.

$start  = new DateTime('-7 days', new DateTimeZone('UTC'));
$period = new DatePeriod($start, new DateInterval('P1D'), 7);

foreach ($period as $date) {
    var_dump($date->format('D d-m-Y'));
}

Который выводит что-то вроде:

string(14) "Thu 18-02-2010"
string(14) "Fri 19-02-2010"
string(14) "Sat 20-02-2010"
string(14) "Sun 21-02-2010"
string(14) "Mon 22-02-2010"
string(14) "Tue 23-02-2010"
string(14) "Wed 24-02-2010"
string(14) "Thu 25-02-2010"

Подобное можно сделать относительно легко с помощью strtotime , как в приведенном ниже фрагменте кода (который выдает тот же результат, что и выше):

for ($i = 7; $i >= 0; $i--) {
    var_dump(date('D d-m-Y', strtotime("-$i days")));
}
1 голос
/ 26 февраля 2010

Использование strtotime()

for($i = 1; $i <= 10; $i++){
    echo strtotime("-$i days"), PHP_EOL;
}

Также см. Этот связанный вопрос и ответы:

0 голосов
/ 26 февраля 2010

Все, что вам нужно, вы можете найти на этой странице руководства по php .

0 голосов
/ 26 февраля 2010

Чтобы сгенерировать метку времени в 12 часов за последние 10 дней (включая сегодняшний день), подойдет следующий код:

<?php
for ($i=0; $i<=10; $i++) {
  echo mktime (0, 0, 0, date('m'), date('d')-$i, date('Y'));
}
?>
...