2014-10-27 56 views
0

我試圖獲得星期一和星期日(分別在哥斯達黎加的第一天和最後一天)。所以,我這樣做:「相對日期」顯示「此」參考的未來日期

$now = new \DateTime(); 

    $monday = new \DateTime(); 
    $monday = $monday->modify("monday this week"); 

    $sunday = new \DateTime(); 
    $sunday = $sunday->modify("sunday this week"); 

    echo "timezone: " . date_default_timezone_get(); 
    echo "<br>"; 
    echo "now: " . $now->format('d/m/Y H:i'); 
    echo "<br>"; 
    echo "monday: " . $monday->format('d/m/Y H:i'); 
    echo "<br>"; 
    echo "sunday: " . $sunday->format('d/m/Y H:i'); 

輸出是:

timezone: America/Costa_Rica 
now: 26/10/2014 19:01 
monday: 27/10/2014 00:00 
sunday: 02/11/2014 00:00 

但是,怎麼可能是當期的一週是指向未來的日期?

+1

出於某種原因,指的是「本週星期一」和「星期日本週」不工作的方式,你,我,覺得它將。 – 2014-10-27 01:09:26

+0

定義timezome應根據[documentation](http://php.net/manual/en/function.date-default-timezone-set.php)修復它:'將所有日期/時間函數使用的默認時區設置爲一個腳本' – manix 2014-10-27 01:14:10

回答

1

試試這個:

$monday = new DateTime(); 
// create DateTime object with current time 

$monday->setISODate($monday->format('o'), $monday->format('W')); 
// set object to Monday this week 

$sunday = clone $monday; 
// clone DateTime object 

$sunday->modify('+6 day'); 
// add 6 days to Monday, to get the Sunday 

echo sprintf(
    'This week is stared on %s, and ended on %s.', 
    $monday->format('Y-m-d'), 
    $sunday->format('Y-m-d') 
); 
// just print out the result 

demo

+0

謝謝你,你的代碼解決了這個問題,但我仍在調查爲什麼「本週」會返回未來的日期。 – manix 2014-10-27 16:18:52

+0

@manix:就像@John在評論中說的那樣,這不像預期的那樣工作。不是100%肯定的,但對於第一個例子,在你使用'本週星期一'的地方,你會在2014-10-27出去,恕我直言,這是正確的,因爲PHP的週數本來是在星期天開始,在星期六結束。在週日(2014-10-26)和週六(2014-11-01)之間的一週,週一在2014-10-27。這適用於一週中的所有日子,但只有星期日纔是例外,這超出了我的想象。當你在本週使用「星期日」,而你現在在星期天,你總是會得到下一個星期日,那就是爲什麼你會得到2014-11-02。 – 2014-10-27 18:39:04

+0

我的示例基於[ISO8601](http://en.wikipedia.org/wiki/ISO_8601)標準,其中規定:「......從星期一開始到星期天結束」。 – 2014-10-27 18:40:54