2014-01-08 2 views
0

Согласно стандарту ISO, 52-я неделя 2013 года, когда начинается неделя в субботу, начинается 2013-12-28 и заканчивается 2014-01-03 (включительно).PHP получает номер недели ISO для даты, день начала которой отличается от понедельника

Код:

echo date('Y-m-d', strtotime("2013-W52-6"));//prints 2013-12-28 

Теперь я пытаюсь выяснить обратное с помощью PHP. Если у меня есть дата 2014-01-03, как узнать номер недели ISO этой даты, если неделя начнется в субботу?

+1

Вы не можете переопределить [ 'ISO-8601' НомерНедели] (http://en.wikipedia.org/wiki/ISO-8601#Week_dates), он имеет довольно четкое, однозначное определение. Вы можете указать дату _another_ weeknumber, указав свой собственный стандарт нумерации недели, который не является тем же и не будет 'ISO-8601', и вам нужно будет решить, хотите ли вы, чтобы смещение продвигалось вперед в времени или предоставить пользовательские правила, просмотрев определение в оригинале. В каком направлении он должен идти? – Wrikken

+1

Как начать неделю в субботу? –

+0

Итак, с любой даты, вы хотите его номер недели? Я не понимаю, почему мой ответ не работает? –

ответ

0

Используйте класс DateTime:

  1. createFromFormat() для создания объекта на основе строки у вас есть
  2. затем формат ('W')
-1
$date = "2013-12-28"; 
$date_array = explode("-", $date); 
$date = mktime(0, 0, 0, $date_array[1], $date_array[2], $date_array[0]); 
$week_number = date('W', $date); 
echo $week_number; 

Нечто подобное ,

+0

DateTime :: createFromFormat() более элегантно, чем взрывается ... –

+0

Это слишком много. Обе даты() и DateTime могут обрабатывать даты форматирования Y-m-d без каких-либо манипуляций. –

+0

Я думаю, что объекты DateTime и createFromFormat работают только в PHP 5+ (а не PHP 4). – raj

0
$date = "2013-12-28"; 
$dayofyear = date("z", $date); 

$week = floor($dayofyear/7) + 1; 

// I assume week starts with Monday (I think as ISO does?) 
// so only weeks that start on sunday will count as "week 0" instead of "week 1" 
// I could be wildly wrong, adjust according to your needs 
$first_day = date("w", date("Y", $date) . "-01-01"); 
if ($first_day == 6) 
    --$week; 

echo $week; 
Смежные вопросы