2016-09-25 38 views
1

每個星期天,strtotime函數在我的日程安排網站上做奇怪的事情。它顯示下週的日期而不是+2周。週日的strtotime函數bug

我的代碼:

date_default_timezone_set("Europe/Amsterdam"); 
    $time = time(); 
    //Check the date of Monday and Sunday from 2 weeks later. 
    $monday = date('d-m-Y', strtotime('+1 week monday')); 
    $sunday = date('d-m-Y', strtotime('+2 week sunday')); 
    //Check the weeknumber of this week and add 2, so that it shows the weeknumber of 2 weeks later. 
    $weekdata = date("W", strtotime('+1 day', $time)); 
    $weeknumber = $weekdata + 2; 

$Weeknumber顯示正確的信息:42,但$monday$sunday顯示下週的星期一和星期日(2016年3月10日| 2016年9月10日),但我想有它顯示(10-10-2016 | 16-10-2016)

此外,有沒有辦法讓星期一開始在星期一而不是星期天?因爲在「本週」頁面上,它已經顯示了26-09-2016 |星期的數據02-10-2016而不是19-09-2016 | 25-10-2016。

+2

我不知道什麼應該是錯的。它按預期工作。下週的星期日**是** 10月2日。並要求星期一使它成爲10月3日。 –

+0

我必須同意@CharlotteDunois它似乎正在工作,因爲人們會期望 – RiggsFolly

+0

作爲玩具設置被認爲是一週開始的一天,請參閱http://php.net/manual/en/intlcalendar.setfirstdayofweek .php' – RiggsFolly

回答

0

在5.5.31版PHP上發生了strtotime函數錯誤。升級您的PHP版本或嘗試下面的修復。

所以我修復了一個if/else語句的bug。

$time = time(); 
    //Check the date of monday and sunday from this week. 
    //Strtotime() bug on PHP version 5.5.31. Bug report: https://bugs.php.net/bug.php?id=63740 
    if(date("l") == "Sunday"){ 
     $monday = date('d-m-Y', strtotime('monday last week')); 
     $sunday = date('d-m-Y', strtotime('sunday last week')); 
     //Check the weeknumber of this week. 
     $weeknumber = date("W", strtotime('+0 day', $time)); 
    } else { 
     $monday = date('d-m-Y', strtotime('monday this week')); 
     $sunday = date('d-m-Y', strtotime('sunday this week')); 
     //Check the weeknumber of this week. 
     $weeknumber = date("W", strtotime('+1 day', $time)); 
    } 

由於錯誤只發生在星期天,我做了if/else語句只檢查週日不爲別的日子。如果今天不是星期天,它會運行其他代碼,這是獲取本週數據的正常方式。如果今天不是星期日,而是一週的另一天,我會看看代碼是否工作100%。

我只是想向將要訪問這個問題的人展示我對這個問題的解決方案。