2014-01-07 4 views
0

В моем PHP приложение у меня есть три переменные:PHP - получить первый день данной недели числа, когда неделя начинается в день, кроме понедельника

Код:

$year = 2014 
$weeknumber = 1 
$weekstarts = 6 //Week starts on Saturday. 1=Monday... 6=Saturday and 7=Sunday 

С этими тремя параметрами I хотел бы выяснить, что такое первый день недели. В этом случае 1-я неделя 2014 года, когда начинается неделя в субботу, составляет 28 декабря. 2014-01-04.

В течение нескольких недель, которые начинаются в понедельник я могу легко понять это с:

Код:

$first_day_of_week = strtotime($year . "W" . "0".$weeknumber) 

Но он не работает в течение нескольких недель, начиная с понедельника, кроме дней.

+0

Это действительно трудно сказать, что вы просите. Вы пытаетесь выяснить, что такое предыдущая суббота для данной даты? – davethegr8

+0

Мы говорим о фактических номерах недели или просто «независимо от того, что первая неделя была с датой в этом году, считая с моего дня, будет неделя 1»? – Wrikken

+0

@ davethegr8 вы можете обеспечить реализацию своей идеи? – user2070775

ответ

1

Использование DateTime::setISODate, где третий параметр день недели:

$dt = new DateTime; 
echo $dt->setISODate(2014, 1, 0)->format('Y-m-d'), "\n"; # 0 = Sunday 
echo $dt->setISODate(2014, 1, 1)->format('Y-m-d'), "\n"; # 1 = Monday 
echo $dt->setISODate(2014, 1, 6)->format('Y-m-d'), "\n"; # 6 = Saturday 

demodemo #2


Ваш пример не работает, потому что вы используете формат yyyyWweek, который по умолчанию по умолчанию. Read about ISO-8601 formats, и вы увидите, что есть формат yyyy-Wweek-day, который можно использовать как:

$format = sprintf("%d-W%02d-%d", $year, $weeknumber, $weekstarts == 7 ? 0 : $weekstarts); 
$first_day_of_week = strtotime($format); 
echo "$format returned $first_day_of_week\n"; 

demo

+0

Спасибо за упоминание этой функции. Тем не менее, я видел в Календаре Google, что первый день первой недели 2014 года, начинающийся в субботу, - суббота, 28 декабря 2013 года, не в субботу, 4 января. – user2070775

+0

@ user2070775: первая неделя ИСО 2014 года начинается 2013-12-30. Вы говорите о последней неделе 2013 года, где по субботам начинается 2013-12-28. Если вы хотите получить ПРЕДЫДУЩАЯ неделю от текущего/выбранного, все, что вам нужно сделать, это вычесть номер недели на 1. Как я уже сказал, сначала вы должны прочитать, что представляет собой ISO-8601, а затем посмотреть, что вам нужно для вашего приложения. –

+0

Приложение Google Calendar для Android 4.3 говорит, что первая неделя 2014 года, когда начинается неделя в субботу, - 2013-12-28. Возможно, они не следуют стандарту ISO – user2070775

Смежные вопросы