2010-02-25 49 views

回答

3

最简单的办法是获得对应于今天时间戳,使用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'); 

你会得到这样的输出:

它改变了一个月精细。


闰年,如果我测试使用这样的:

$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 

也很正常,因为在2月29日日子是2008年

如果我测试:

$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 

也很正常了。

+0

这不会处理闰年 – 2010-02-25 22:05:48

+0

以及月和周的变化......? – 2010-02-25 22:06:50

+0

@Allain和@Anurag:我编辑了我的帖子以给出其他几个例子;你有没有工作的具体案例? – 2010-02-25 22:12:03

0

要生成上午12点的时间戳为最近10天(包括今天)下面的代码将做到:您可以根据需要在this page of the php manual找到

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

它会处理月份和星期的变化吗?闰年呢? – 2010-02-25 22:09:42

2

如果你足够幸运能够使用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" 

类似的可以在下面的代码段(其产生与上述相同的输出)与strtotime相对容易地完成为:

for ($i = 7; $i >= 0; $i--) { 
    var_dump(date('D d-m-Y', strtotime("-$i days"))); 
}