Разработчику. Сборник рецептов PHP
Задавайте вопросы

Определение дня недели, месяца, года или номера недели в году

Вернуться назад

Задача

Необходимо узнать день или неделю года, день недели или день месяца. Например, требуется выводить на печать специальное сообщение каждый понедельник или в первый понедельник каждого месяца.

Решение

Надо передать соответствующие аргументы функции date() или strftime():

print strftime("Today is day %d of the month and %j of the year.");
print 'Today is day '  .date('d').'    of the month and '.date('z').'   of the year.';

Обсуждение

Эти две функции, date() и strftime(), ведут себя по-разному. Отсчет дней года начинается с 0 в функции date(), но с 1 в функции strftime(). Ниже в таблице, приведены все символы форматирования номеров дня и недели, поддерживаемые функциями date(). и strftime().

Символы форматирования номеров дня и недели
Тип strftime() date() Описание Диапазон
День %d d День месяца, численное значение 01–31
День %j z День года, численное значение 001–366 для strftime(); 0–365 для date()
День %u   День недели, численное значение (Понедельнику соответствует 1) 1–7
День %w w День недели, численное значение (Воскресенью соответствует 0) 0–6
День %W   ISO 8601 день недели, численное значение (Первый день недели –понедельник) 0–6
Неделя %U   Номер недели в году; численное значение; первое воскресенье – это первый день первой недели 00–53
Неделя %V W ISO 8601:1988 номер недели в году; численное значение; неделя 1 – это первая неделя, которая имеет как минимум четыре дня в текущем году; понедельник – это первый день недели 01–53

Например, можно вывести на печать что-нибудь только в понедельник, задав символ форматирования w в функции date() или строку %w в функции strftime():

if (1 == date('w')) {
    print "Welcome to the beginning of your work week.";
}
if (1 == strftime('%w')) {
    print "Only 4 more days until the weekend!";
}

Существуют различные способы определения номеров недель или номеров дней в неделе, поэтому будьте внимательнее при выборе соответствующего способа. Стандарт ISO (ISO 8601) устанавливает, что недели начинаются в понедельник, а дни недели нумеруются от 1 (понедельник) до 7 (воскресенье). Неделя 1 – это первая неделя года, включающая четверг этого года. Это значит, что первая неделя в году – это неделя, в которой большинство дней принадлежат этому году. Номера недель лежат в диапазоне от 01 до 53.

Другой стандарт устанавливает диапазон номеров недель от 00 до 53, при этом дни 53-й недели года могут пересечься с днями 00-й недели следующего года.

До тех пор пока вы находитесь в рамках своей программы, можно не беспокоиться о каких-либо проблемах, но будьте осторожны при взаимодействии с другими PHP-программами или базами данных. Например, MySQL-функция DAYOFWEEK() считает воскресенье первым днем недели, но нумерует дни с 1 до 7, что является стандартом ODBC. Однако функция WEEKDAY() первым днем недели считает понедельник, а дни нумерует от 0 до 6. Функция WEEK() позволяет выбрать первый день недели между воскресеньем и понедельником, но она не совместима со стандартом ISO.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ