2016-09-25 1 views
1

Tous les dimanches, la fonction Strtotime fait des trucs bizarres sur mon site web. Il montre la date de la semaine prochaine au lieu de +2 semaines.Strtotime fonction bug le dimanche

Mon code:

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 affiche des informations correctes: 42, mais $monday et $sunday montre le lundi de la semaine prochaine et dimanche (10.03.2016 | 10/09/2016), mais je veux avoir De plus, y a-t-il un moyen de faire commencer les semaines lundi au lieu de dimanche? Parce que, sur la page "cette semaine", il montre déjà les données de la semaine 26-09-2016 | 02-10-2016 au lieu de 19-09-2016 | 25-10-2016.

+2

Je ne suis pas sûr de ce qui devrait être faux. Cela fonctionne comme prévu. Le dimanche de la semaine prochaine ** est ** le 2 octobre. Et demander le lundi le fait le 3 octobre. –

+0

Je suis d'accord avec @CharlotteDunois il semble fonctionner comme on s'y attendrait – RiggsFolly

+0

En tant que jouet fixant le jour qui est considéré comme le début d'une semaine voir 'http://php.net/manual/fr/intlcalendar.setfirstdayofweek .php' – RiggsFolly

Répondre

0

Le bug de la fonction strtotime se produit sur PHP version 5.5.31. Mettez à jour votre version de PHP ou essayez le correctif ci-dessous. J'ai donc corrigé le bogue avec une instruction if/else.

$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)); 
    } 

Depuis le bug ne est arrivé le dimanche, je fait l'instruction if/else vérifie uniquement dimanche et non pour les autres jours. Si aujourd'hui ce n'est pas le dimanche, il utilise le code else, qui est la manière normale d'obtenir les données de cette semaine. Je verrai si le code fonctionne à 100% quand ce n'est pas dimanche, mais un autre jour de la semaine.

Je voulais juste montrer ma solution à ce problème aux personnes qui vont visiter cette question à l'avenir.