2016-09-25 77 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%。

我只是想向将要访问这个问题的人展示我对这个问题的解决方案。