2010-02-25 56 views
1

如何組合一個PHP5函數,該函數可以查找當前日曆周,並將星期一開始的每週中每天的日期返回爲數組?例如,如果函數是運行今天(星期四2010年2月25日),該函數將返回類似於數組:將當前日曆周的返回日期作爲PHP5中的數組

[0] => Mon Feb 22 2010<br /> 
[1] => Tue Feb 23 2010<br /> 
[2] => Wed Feb 24 2010<br /> 
[3] => Thu Feb 25 2010<br /> 
[4] => Fri Feb 26 2010<br /> 
[5] => Sat Feb 27 2010<br /> 
[6] => Sun Feb 28 2010<br /> 

不要緊,什麼格式的日期,因爲我認爲存儲在陣列中,那很容易改變。此外,可以選擇提供日期作爲參數,並獲取該日期的日曆周而不是當前的日期。

謝謝!

回答

3

我想一個解決辦法是通過獲得對應於上週一的時間戳,使用strtotime開始:

$timestampFirstDay = strtotime('last monday'); 


但是,如果你試圖用今天(星期四),像這樣的東西:

$timestampFirstDay = strtotime('last thursday'); 
var_dump(date('Y-m-d', $timestampFirstDay)); 

你會得到:

string '2010-02-18' (length=10) 

即上週...有關的strtotime,「最後」 「今天之前的一個」。

這意味着你必須測試,如果今天是作爲返回由strtotime加壹周「上週一」 - 而且,如果是這樣,添加一個本週賽事

這裏是一個可能的(有可能是聰明的想法)解決方案:

$timestampFirstDay = strtotime('last monday'); 
if (date('Y-m-d', $timestampFirstDay) == date('Y-m-d', time() - 7*24*3600)) { 
    // we are that day... => add one week 
    $timestampFirstDay += 7 * 24 * 3600; 
} 


而現在,我們有「上週一」的時間戳,我們可以寫一個簡單for迴路循環7次,每次增加1天,這樣的:

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

這將給我們這樣的輸出:

2010-02-22 
2010-02-23 
2010-02-24 
2010-02-25 
2010-02-26 
2010-02-27 
2010-02-28 


現在,你來:

  • 修改for循環,因此存儲陣列中的
  • 決定你婉哪種格式的日期噸至使用的date功能

有樂趣;-)

+0

你是男人! –

+0

請注意,此方法不適用於時鍾變化,例如一週可能會多於或少於7 * 24 * 3600秒。 – Tom

1

承租人。 。首先,爲了避免任何時區問題,我想在您想與之比較的那一天掛到中午,所以一個小時不會造成任何問題。

$dateCompare = time(); // replace with a parameter 
$dateCompare = mktime(12, 0, 0, date('n', $dateCompare), 
     date('j', $dateCompare), date('Y', $dateCompare)); 

然後找到你的日期的一週中的一天。

$dow = date('N', $dateCompare); 

1是星期一,所以算出星期一我們有多少天。

$days = $dow - 1; 

現在減去天的價值秒,直到你回到星期一。

$dateCompare -= (3600 * 24 * $days); 

現在組裝你的數組。

$output = array(); 
for ($x = 0; $x < 7; $x++) { 
    $output[$x] = $dateCompare + ($x * 24 * 3600); 
} 

這是一個時間戳數組,但你可以,如果你喜歡的日期存儲爲字符串。

相關問題