在php中生成前七天的日期

在php中生成前七天的日期,php,date,timestamp,Php,Date,Timestamp,我需要有关生成关于今天的最后七到十天的日期和天数的帮助。如何创建准确的时间戳,以处理周、月和年的变化?使用 对于($i=1;$i而言,最简单的方法是使用函数获取与今天相对应的时间戳;7次删除该时间戳的1天,每次都回显与该时间戳相对应的日期: $timestamp = time(); for ($i = 0 ; $i < 7 ; $i++) { echo date('Y-m-d', $timestamp) . '<br />'; $timestamp -= 24

我需要有关生成关于今天的最后七到十天的日期和天数的帮助。如何创建准确的时间戳,以处理周、月和年的变化?

使用


对于($i=1;$i而言,最简单的方法是使用函数获取与今天相对应的时间戳;7次删除该时间戳的1天,每次都回显与该时间戳相对应的日期:

$timestamp = time();
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $timestamp) . '<br />';
    $timestamp -= 24 * 3600;
}
由于时间戳仅表示自1970-01-01以来的秒数,因此将一天减去时间戳意味着减去
24*3600


在评论后编辑:

对于月和周的更改,这仍然有效:一天仍然是24*3600秒

例如,如果您使用此行而不是我在第一个示例中发布的第一行进行测试:

$timestamp = strtotime('2010-02-03');
您将获得以下输出:

2010-02-25
2010-02-24
2010-02-23
2010-02-22
2010-02-21
2010-02-20
2010-02-19
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
2009-03-03
2009-03-02
2009-03-01
2009-02-28
2009-02-27
2009-02-26
2009-02-25
看起来不错,2008年2月有29天

如果我测试:

$timestamp = strtotime('2009-03-03');
我得到:

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

这看起来也不错。

要生成过去10天(包括今天)上午12点的时间戳,以下代码将执行以下操作:

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


您可以在中找到所需的所有内容。

如果您足够幸运,能够使用PHP 5.3(为什么不?),那么//类也将非常有用。下面的示例将打印与今天相关的前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"
在下面的代码段中可以相对轻松地完成类似的操作(生成与上面相同的输出):


那么月和周的变化呢…?@Allain和@Anurag:我编辑了我的帖子,给出了几个其他的例子;;你有没有一个具体的例子说明这不起作用?如果你只显示完整的日期,你不会注意到区别,但是如果你显示时间戳(日期+时间你会发现问题。也不会处理dst。它可能会因此跳过一天。它会处理月和周的变化。闰年呢。。?