2013-04-17 13 views
6

Potrzebuję uzyskać numer tygodnia w php, gdzie tydzień powinien być obliczany od niedzieli. Domyślnie jest od poniedziałku. Proszę, pomóż mi znaleźć sposób na zdobycie numeru tygodnia, biorąc pod uwagę niedzielę jako dzień rozpoczęcia.Jak zdobyć tygodnie od niedzieli?

W podręczniku php ISO-8601 numer tygodnia w roku, tydzień zaczyna się w poniedziałek (dodane w PHP 4.1.0)

Ale muszę dostać numer tygodnia w roku, tydzień zaczyna się w niedzielę.

dzięki

+0

Ten link może ci pomóc: http://stackoverflow.com/questions/5376484/support-with-getting-week-starting-from-sayay –

+8

Uzyskaj numer tygodnia od poniedziałku. Następnie, jeśli dana data jest niedziela, zmniejsz liczbę tygodni. Uważaj, aby nie spaść poniżej 0. – Jon

+0

Chciałeś powiedzieć "Przyrost" – dVaffection

Odpowiedz

4

Spróbuj tego:

$week = intval(date('W')); 

if (date('w') == 0) {   // 0 = Sunday 
    $week++; 
} 

echo $week; 

Nie wiem, czy logika ma rację chociaż;

+0

To zadziałało ... Dość dużo .. !! – cyberrspiritt

+0

sprawdź moją odpowiedź na kiedy zawinie lat – hounded

1

Należy spróbować z strftime

$week_start = new DateTime(); 
$week = strftime("%U"); //this gets you the week number starting Sunday 
$week_start->setISODate(2012,$week,0); //return the first day of the week with offset 0 
echo $week_start -> format('d-M-Y'); //and just prints with formatting 
2

Spróbuj tego. aby w niedzielę dzień musi wynosić -1 dzień.

$date = "2015-05-25"; 
echo date("W", strtotime("-1 day",strtotime($date))); 
3

Aby rozwinąć na silkfire odpowiedź i pozwalają na to owijanie wokół roku

if($date->format('w') == 0){ 
     if(date('W',strtotime($date->format('Y')."-12-31"))==52 and $date->format('W') == 52){ 
      $week = 1; 
     } 
     elseif(date('W',strtotime($date->format('Y')."-12-31"))==53 and $date->format('W') == 53){ 
      $week = 1; 
     } 
     else{ 
      $week++; 
     } 
    } 
+0

To nie działa w dniu 2015-12-31. Jeśli tygodnie rozpoczynają się w niedzielę, powinno być 52, podczas gdy twoja funkcja zwraca 53. –

2

pierwsze rozwiązanie nie jest poprawne w dniu sty 01, 2017 spróbuj tego:

$ date = Data ("Ym-d");
echo strftime ("% U", strtotime ($ date));