2010-02-25 422 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"))); 
}