Comments 44
Не сразу понятно, о каком языке программирования идет речь.
уточнил )
разве 12/29/2008 относится не к первой неделе 2009-го года?
относится, но так же и относится к 53 недели года, и правильнее на мой взгляд пока я нахожусь в 2008 показывать мне номер на этот год а не на следующий, потому что когда система строится из соотношения года и номера недели я хочу знать что у меня 53 — 2008 а не 00 — 2008 так как при всем при этом год он показывает 2008 — й.
Цель поста моего заключалась в предостережении при проектировании и тестировании. Я использовал strftime потому что он показал мне данные которые мне были необходимы за что и спасибо.
Надеюсь что новый класс DateTime кажется, будет работать стабильно
Цель поста моего заключалась в предостережении при проектировании и тестировании. Я использовал strftime потому что он показал мне данные которые мне были необходимы за что и спасибо.
Надеюсь что новый класс DateTime кажется, будет работать стабильно
Просто есть несколько разных стандартов.
Разве из названия блога это неясно?
И картинка гномовского календаря с толку сбивает.
Наверное, речь о date (в тексте и тегах).
теперь про «глюкабрь» стало чуть понятнее ;)
Из описания date: W Порядковый номер недели года по ISO-8601
А все описания этого стандарта говорят, что неделя — от 01 до 53. И откуда там ноль взялся?
А все описания этого стандарта говорят, что неделя — от 01 до 53. И откуда там ноль взялся?
из практики, хотя надо заметить что до определеного момента проект разрабатывался одновременно фришке и маке date шалил во всю, несмогу обьяснить почему, я всего лишь програмист а не разработчик языка.
Думаю тут дело не в языке, а в ОС/библиотеках, плюс локали. Уж под никсами точно PHP вызывает системные date() и strftime(). А уж как реализовывали под виндой и и др. осями…
Угу, но начиная с 29-12-2008 номер недели равен 1 :)
нашел откуда у нуля ноги растут (вернее, наверное, тело, ноги где-нить в суровой послевоенной древности :) )
www.opengroup.org/onlinepubs/007908799/xcu/date.html
%W
Week of the year (Monday as the first day of the week) as a decimal number [00-53]. All days in a new year preceding the first Monday are considered to be in week 0.
www.opengroup.org/onlinepubs/007908799/xcu/date.html
%W
Week of the year (Monday as the first day of the week) as a decimal number [00-53]. All days in a new year preceding the first Monday are considered to be in week 0.
29.12 не похоже на «All days in a new year preceding the first Monday»
А вот как раз описание к аналогичной мускуловской функции, о котором я откомментил чуть ниже, говорит точнее :)
Ну а так как ноги растут из одного места…
Note that if a date falls in the last week of the previous year, MySQL returns 0 if you do not use 2, 3, 6, or 7 as the optional mode argument:
Ну а так как ноги растут из одного места…
А тут вопрос что считать новым годом :)
По тому же исошному стандарту 29-12-2008 это первый день первой недели 2009 года :)))))
выводит 01 2009
По тому же исошному стандарту 29-12-2008 это первый день первой недели 2009 года :)))))
<?php
echo strftime ('%V %G', strtotime('12/29/2008'));
?>
выводит 01 2009
Насчет осторожности — очень даже согласен :)
У нас тут недавно были проблемы с написанным для нас промышленным драйвером. В ночь на 1е декабря он начал сбоить. Два дня мы просидели на работе, пытаясь разобраться с глюками, а 2го числа разработчик прислал обновление. После анализа логов он обнаружил, что неправильно вел работу с месяцами, и декабрь (12 месяц) у него не обрабатывается. Соответственно отсутствие синхронизации и т.д.
В общем, с нетерпением ждем НГ, вдруг 2009й год они тоже не учли…
У нас тут недавно были проблемы с написанным для нас промышленным драйвером. В ночь на 1е декабря он начал сбоить. Два дня мы просидели на работе, пытаясь разобраться с глюками, а 2го числа разработчик прислал обновление. После анализа логов он обнаружил, что неправильно вел работу с месяцами, и декабрь (12 месяц) у него не обрабатывается. Соответственно отсутствие синхронизации и т.д.
В общем, с нетерпением ждем НГ, вдруг 2009й год они тоже не учли…
выбирайте:
%U номер недели в году, если первый день недели — воскресенье (00..53)
%V номер недели по ISO, если первый день недели — понедельник (01..52)
%W номер недели в году, если первый день недели — понедельник (00..53)
$ date "+%W %V %U"
52 01 52
%U номер недели в году, если первый день недели — воскресенье (00..53)
%V номер недели по ISO, если первый день недели — понедельник (01..52)
%W номер недели в году, если первый день недели — понедельник (00..53)
$ date "+%W %V %U"
52 01 52
В общем то сами RFC не настолько прозрачны и часто содержат вот такие вот подводные камни. Частенько в PHP делали более интуитивными такие вещи, но в последнее время больше делают по RFC, в итоге якобы появляются вот такие баги, хотя на самом деле это жесткое следование RFC. С датами именно с этой проблемой было обсуждение на internal листе и решили оставить так, как написано в RFC и не делать свой фикс, так что запоминайте подводный камень и обходите сами если очень надо.
А если работаем с БД и строим отчеты, то лучше иметь таблицу, где каждой дате будут проставлены соответственно год, квартал, месяц, неделя (можно в нескольких стандартах), день недели и т.д.
Сильно жизнь упрощает и запросы ускоряет, к вашей задаче тоже применимо.
Сильно жизнь упрощает и запросы ускоряет, к вашей задаче тоже применимо.
А в ПыхПыхе уже появился нормальный класс (а не
strtotime(“12/29/2008″)
) для работы с датой-временем?Можно подумать, есть какое-то принципиальное различие между «нормальным классом» и «ненормальными» функциями работы с.
в 5.2 появился DateTime плюс еще несколько классов вспомогательных
появился, но он отвратительно кривой
вот хорошая подробная статья: laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/
вот хорошая подробная статья: laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/
Использую PEAR Calendar
Sign up to leave a comment.
Осторожность с датой не помешает