Может кто-нибудь объяснить мне, почему это происходит?Неделя проблемы в php
strftime('%YW%U', strtotime('2013W37')) = '2013W36'
У меня есть некоторый код, который полагается на что не происходит. Любые альтернативы?
Я использую PHP 5.4.9 на OSX
Может кто-нибудь объяснить мне, почему это происходит?Неделя проблемы в php
strftime('%YW%U', strtotime('2013W37')) = '2013W36'
У меня есть некоторый код, который полагается на что не происходит. Любые альтернативы?
Я использую PHP 5.4.9 на OSX
Вы используете неправильный символ формата.
Строка "2013W37"
интерпретируется strtotime
в соответствии с ISO-8601, в котором неделю начать в понедельник, и в первой неделе года является одна из которых содержит по крайней мере, 4 дней в новом году и пронумерована 1.
Но %U
получает вас номер недели в году, в котором неделя начинается в воскресенье и первую неделю года в неделю 0.
Что вы хотите %YW%V
, потому что %V
является ISO-8601 номер недели.
Поскольку вы используете PHP 5.4, почему не использовать Datetime();
класс.
Нечто подобное.
$date = new Datetime('2013W37');
print $date->format('Y\WW');
Это будет выводить 2013W37;
Также с помощью класса Datetime() вы открываете мощность ООП, а также множество математических функций даты.
Вы можете прочитать здесь:
Обратите внимание, что конструктор 'DateTime' использует тот же процесс разбора, что и' strtotime' , а 'DateTime :: format' использует те же форматирующие спецификации, что и' date', поэтому этот ответ также работает без ООП. Ключевым моментом является то, что не все определения по неделям работают одинаково. – IMSoP
strtotime
uses ISO standard при разборе этой строки, так что вы должны использовать %V
на номер недели.
PS: Но почему-то %V
не работает в Windows.
О, я никогда не видел эту страницу документации раньше. Мне потребовалось некоторое время, чтобы понять, на что я смотрю, но это очень удобная ссылка. Я всегда думал, что «strtotime» и его двоюродные братья OO были просто «волшебными»;) – IMSoP
В этой документации есть еще 3 страницы. – Gustek
что вы хотите? –
Ну, я полагаю, он хочет, чтобы «2013W37» стал результатом. Я поставил пиво, это вопрос часового пояса (дата переезда на пару часов в предыдущую неделю) –
мы все можем догадаться, я подожду и посмотрю, не потрудится ли он ответить. –