2012-09-05 90 views
0

的開始我一直在放置一個每週查看日曆,讓用戶使用表單上的按鈕向後或向前移動一週。除了當日歷第一次打開它時,一切運行良好,即當前日期如果是一週的開始,那麼剩下的日子全部結束。日曆認爲當天是

這裏是我迄今爲止...

if(isset($_POST['add_week'])){ 
    $last_week_ts = strtotime($_POST['last_week']); 
    $display_week_ts = $last_week_ts + (3600 * 24 * 7); 
} else if (isset($_POST['back_week'])) { 
    $last_week_ts = strtotime($_POST['last_week']); 
    $display_week_ts = $last_week_ts - (3600 * 24 * 7); 
} else { 
    $display_week_ts = floor(time()/(3600 * 24)) * 3600 * 24; 
} 

$week_start = date('d-m-Y', $display_week_ts); 

for ($i = 0; $i < 7; $i++) { 
    $current_day_ts = $display_week_ts + ($i * 3600 *24); 
    echo date('d-m-Y', $current_day_ts); 
} 

我知道是什麼問題,該行

$display_week_ts = floor(time()/(3600 * 24)) * 3600 * 24; 

它調用當前的一天,但$ week_start需要是第一天一週,但我已經嘗試了一切,我可以找到。我曾嘗試

$display_week_ts = strtotime("Monday noon"); 

這似乎直到達到日記週一10月29日,此時它似乎跳過了一天,使10月29日星期二,而不是運行良好。

我發現在這個網站上找到了本週初的另一個話題,但我一直無法成功地實現它們

我會在這方面的任何幫助非常感謝,我一直在努力關於它在這裏已經三天......

回答

0

試試這個:

$display_week_ts = floor(time()/(3600 * 24)) * 3600 * 24; 
$dow = date("w", $display_week_ts); 
$dow = ($dow + 6) % 7; 
$display_week_ts -= $dow * 3600 * 24; 

$monday = new DateTime(date("Y-m-d", $display_week_ts)); 

現在$monday包含當前周的星期一的日期。將該對象存儲在會話中。當你需要移動到下週,尋找下一個週一

$monday->modify('+1 week'); 

要找到以前的週一,使用

$monday->modify('-1 week'); 

尋找新的週一後,將其放回了會議。

+0

嗨,非常感謝你,我將如何將其納入我的代碼?它工作正常,直到我試圖移動到下一個或上個星期 – tatty27

+0

@ user1267224當您顯示第一週時,在會話中存儲'$ display_week_ts'的值。然後,在下週移動時,將「3600 * 24」添加到該值並存儲回會話。同樣,移到前一週時減去。然後,您可以始終將此值用作日曆的開始日期。 –

+0

嗨,我設法讓它工作,但是現在發生的事情與我使用strtotime('monday noon')時相同,它在2012年10月28日前跳過了一天。可能是因爲這是同一天英國夏天時間結束和時鐘回到一小時 – tatty27