2013-09-15 3 views
3

Может кто-нибудь объяснить мне, почему это происходит?Неделя проблемы в php

strftime('%YW%U', strtotime('2013W37')) = '2013W36'

У меня есть некоторый код, который полагается на что не происходит. Любые альтернативы?

Я использую PHP 5.4.9 на OSX

+2

что вы хотите? –

+1

Ну, я полагаю, он хочет, чтобы «2013W37» стал результатом. Я поставил пиво, это вопрос часового пояса (дата переезда на пару часов в предыдущую неделю) –

+0

мы все можем догадаться, я подожду и посмотрю, не потрудится ли он ответить. –

ответ

3

Вы используете неправильный символ формата.

Строка "2013W37" интерпретируется strtotime в соответствии с ISO-8601, в котором неделю начать в понедельник, и в первой неделе года является одна из которых содержит по крайней мере, 4 дней в новом году и пронумерована 1.

Но %U получает вас номер недели в году, в котором неделя начинается в воскресенье и первую неделю года в неделю 0.

Что вы хотите %YW%V, потому что %V является ISO-8601 номер недели.

1

Поскольку вы используете PHP 5.4, почему не использовать Datetime(); класс.

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

$date = new Datetime('2013W37'); 

print $date->format('Y\WW'); 

Это будет выводить 2013W37;

Также с помощью класса Datetime() вы открываете мощность ООП, а также множество математических функций даты.

Вы можете прочитать здесь:

http://php.net/manual/en/class.datetime.php

+0

Обратите внимание, что конструктор 'DateTime' использует тот же процесс разбора, что и' strtotime' , а 'DateTime :: format' использует те же форматирующие спецификации, что и' date', поэтому этот ответ также работает без ООП. Ключевым моментом является то, что не все определения по неделям работают одинаково. – IMSoP

1

strtotime uses ISO standard при разборе этой строки, так что вы должны использовать %V на номер недели.

PS: Но почему-то %V не работает в Windows.

+0

О, я никогда не видел эту страницу документации раньше. Мне потребовалось некоторое время, чтобы понять, на что я смотрю, но это очень удобная ссылка. Я всегда думал, что «strtotime» и его двоюродные братья OO были просто «волшебными»;) – IMSoP

+0

В этой документации есть еще 3 страницы. – Gustek

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