Пример 3
22 of January 1971, at 1.30 pm, Friday
checkdate( ) - проверка правильности даты. Аргументы: месяц, день, год. Возвращает true . если дата правильная, т. е.
месяц - целое число от 1 до 12;
Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.
strftime( ) - формирование локальной даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции setlocate( ) Строка формата может содержать следующие коды:
6.3.4 Функции даты и времени
Описание диапазона величин для каждого типа и возможные форматы представления даты и времени приведены в разделе section 6.2.2 Типы данных даты и времени .
Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной date_col в течение последних 30 дней:
DAYOFWEEK(date) Возвращает индекс дня недели для аргумента date (1 = воскресенье, 2 = понедельник. 7 = суббота). Эти индексные величины соответствуют стандарту ODBC: WEEKDAY(date) Возвращает индекс дня недели для аргумента date (0 =понедельник, 1 = вторник. 6 = воскресенье): DAYOFMONTH(date) Возвращает порядковый номер дня месяца для аргумента date в диапазоне от 1 до 31: DAYOFYEAR(date) Возвращает порядковый номер дня года для аргумента date в диапазоне от 1 до 366: MONTH(date) Возвращает порядковый номер месяца в году для аргумента date в диапазоне от 1 до 12: DAYNAME(date) Возвращает название дня недели для аргумента date. MONTHNAME(date) Возвращает название месяца для аргумента date. QUARTER(date) Возвращает номер квартала года для аргумента date в диапазоне от 1 до 4: WEEK(date) WEEK(date, first) При наличии одного аргумента возвращает порядковый номер недели в году для date в диапазоне от 0 до 53 (да, возможно начало 53-й недели) для регионов, где воскресенье считается первым днем недели. Форма WEEK() с двумя аргументами позволяет уточнить, с какого дня начинается неделя - с воскресенья или с понедельника. Неделя начинается с воскресенья, если второй аргумент равен 0, и с понедельника - если 1: Примечание: в версии 4.0 функция WEEK(#,0) была изменена с целью соответствия календарю США. YEAR(date) Возвращает год для аргумента date в диапазоне от 1000 до 9999: YEARWEEK(date) YEARWEEK(date, first) Возвращает год и неделю для аргумента date. Второй аргумент в данной функции работает подобно второму аргументу в функции WEEK(). Следует учитывать, что год может отличаться от указанного в аргументе date для первой и последней недель года: HOUR(time) Возвращает час для аргумента time в диапазоне от 0 до 23: MINUTE(time) Возвращает количество минут для аргумента time в диапазоне от 0 до 59: SECOND(time) Возвращает количество секунд для аргумента time в диапазоне от 0 до 59: PERIOD_ADD(P, N) Добавляет N месяцев к периоду P (в формате YYMM или YYYYMM ). Возвращает величину в формате YYYYMM. Следует учитывать, что аргумент периода P не является значением даты: PERIOD_DIFF(P1,P2) Возвращает количество месяцев между периодами P1 и P2. P1 и P2 должны быть в формате YYMM или YYYYMM. Следует учитывать, что аргументы периода P1 и P2 не являются значениями даты: DATE_ADD(date, INTERVAL expr type) DATE_SUB(date, INTERVAL expr type) ADDDATE(date, INTERVAL expr type) SUBDATE(date, INTERVAL expr type) Данные функции производят арифметические действия над датами. Обе являются нововведением версии MySQL 3.22. Функции ADDDATE() и SUBDATE() - синонимы для DATE_ADD() и DATE_SUB(). В версии MySQL 3.23 вместо функций DATE_ADD() и DATE_SUB() можно использовать операторы + и -. если выражение с правой стороны представляет собой столбец типа DATE или DATETIME (см. пример ниже). Аргумент date является величиной типа DATETIME или DATE. задающей начальную дату. Выражение expr задает величину интервала, который следует добавить к начальной дате или вычесть из начальной даты. Выражение expr представляет собой строку, которая может начинаться с - для отрицательных значений интервалов. Ключевое слово type показывает, каким образом необходимо интерпретировать данное выражение. Вспомогательная функция EXTRACT(type FROM date) возвращает интервал указанного типа ( type ) из значения даты. В следующей таблице показана взаимосвязь аргументов type и expr :
Ожидаемый формат expr
Определение номера недели по дате
Определение номера недели по дате, европейский(российский) или американский стандарты, простая нумерация
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели.
Первый способ .
Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 "ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ" - официальный способ расчета номера недели в Российской Федерации. По поводу порядкового номера недели считается, что первой неделей года является та неделя, на которую попадает первый четверг нового года, или, что эквивалентно, та неделя, которая содержит число 4 января. То есть если первое
января выпадает на пятницу, субботу, или воскресенье, то все еще продолжается последняя неделя предыдущего года. Это может приводить к интересным спецэффектам - в году может содержаться 52 или 53 недели, 29, 30, 31 декабря могут относиться к первой неделе следующего года, и наоборот, 1, 2, и 3 января могут относиться к 52 или 53 неделе прошлого года.
Се ля ви, как говорят французы, зато стандарт.
Второй способ :
Условно назовем его "американским". Стандартов на этот счет я не нашел, но общеизвестно, что американцы считают началом недели воскресенье, в отличии от нас, живущих с понедельника. Собственно, способ расчета - первая неделя это та, на которой случилось 1 января, а следующая неделя начинается с ближайшего воскресенья.
Третий способ :
Третий способ я бы назвал "интуитивным" :) Первая неделя это та, на которой случилось 1 января, а следующая неделя начинается с ближайшего понедельника.
Четвертый способ :
"Сквозной". Тут все просто - 1 января начинается первая неделя года, через семь дней, 8 января - вторая неделя года и так далее до конца года.
Номер недели по дате
Потребность знать номер рабочей недели для заданной даты (или группы дат) весьма востребованная вещь в управленческом учете. Понедельные отчеты, еженедельный контроль выполнения плана, недельная сетка вещания в рекламе – все это требует умения определять номер рабочей недели для заданной даты. Задача, на первый взгляд, простая, но (как всегда) есть несколько весьма существенных нюансов.
Во-первых, в разных странах отсчет начала и конца самой недели – различаются. У нас в России днем отсчета недели принят понедельник, а в других странах (например, США и Израиле) – воскресенье.
Во-вторых, вопрос - какую неделю считать первой? На сегодняшний момент существуют как минимум два основных варианта с разной логикой. Рассмотрим их последовательно.
Способ 1. Стандарт ГОСТ ИСО 8601-2001
Первой рабочей неделей года считается та, на которую выпадает первый четверг года (или 4 января, если хотите). Здесь логика проста. Первая неделя – это та, на которую пришлось больше трех дней (больше половины недели) из наступившего года. Некоторое неудобство в том, что в году получается когда 52, а когда 53 рабочих недели. Плюс ко всему 1 января может запросто оказаться 52 неделей предыдущего года.
Но именно этот вариант официально принят в России с 2002 года как государственный и остается им на данный момент (см. ГОСТ ИСО 8601-2001 ). Чтобы посчитать номер недели по дате по такой системе, можно использовать вот такую формулу:
=ОТБР(ОСТАТ(A1+3-ДЕНЬНЕД(A1;2);365,25)/7+1)
=TRUNC(MOD(A1+3-WEEKDAY(A1;2);365,25)/7+1)
В Excel 2013, кстати, функцию для расчета номера недели по ISO добавили в стандартный набор – она называется НОМНЕДЕЛИ. ISO (WEEKNUM. ISO)
Способ 2. Неделя с 1-м января и функция НОМНЕДЕЛИ (WEEKNUM)
В этом случае первой неделей года считается та, на которую попадает 1 января. Здесь также возникает сложность в том, что в году может оказаться 52 или 53 недели и, плюс ко всему, 1 января может выпасть на воскресенье, т. е. шесть последних дней года могут оказаться уже в неделе с номером 1, что затрудняет отчетность. Тем не менее, если такой способ нумерации вам нужен, то его можно реализовать функцией НОМНЕДЕЛИ (WEEKNUM).
Если у вас Excel не 2007 версии, то сначала придется подключить надстройку Пакет анализа через меню Сервис-Надстройки (Tools - Add-Ins - Analysis ToolPak) . чтобы к списку функций Excel в категории Дата и время добавилась функция НОМНЕДЕЛИ (WEEKNUM) . В Excel 2007 ничего специально подключать не надо - эта функция входит в стандартный набор. Дальше просто вставляем эту функцию в нужную ячейку и указываем в качестве аргумента ячейку с датой и точку отсчета недели (1 - с воскресенья, 2 – с понедельника):
При всей внешней простоте этого решения, тут есть две засады. Во-первых, если у того пользователя, который откроет ваш файл, не будет заранее подключена надстройка Пакет анализа или у него не Excel 2007 – он увидит вместо номера недели ошибку #ЗНАЧ. Excel сам не распознает эту функцию, нужно обязательно заранее подключить надстройку. Во-вторых, названия функций из надстроек Excel сам не переводит на другой язык при открытии книги в Excel с другой версией. То есть, если даже у пользователя и подключена надстройка, но версия Excel англоязычная, то он тоже увидит вместо номера недели ошибку #VALUE. потому что нужно вручную исправить русское название функции НОМНЕДЕЛИ на английское WEEKNUM – только так она заработает. Поэтому использование этой функции из надстройки Пакет анализа хорошо только в тех случаях, когда предполагается, что никто кроме вас с файлом работать не будет.
А если будет? Тогда лучше пойти другим путем. Он более примитивен, зато надежен. Если предположить, что дата хранится в ячейке А1, то вот такая формула посчитает такой же номер недели, как и функция НОМНЕДЕЛИ:
=1+ЦЕЛОЕ(( A1 - ДАТА(ГОД( A1 +4-ДЕНЬНЕД( A1 +6));1;5)+ДЕНЬНЕД(ДАТА(ГОД( A1 +4-ДЕНЬНЕД( A1 +6));1;3)))/7)
или в англоязычной версии:
=1+INT((A1-DATE(YEAR(A1+4-WEEKDAY(A1+6)),1,5)+WEEKDAY(DATE(YEAR(A1+4-WEEKDAY(A1+6)),1,3)))/7)
date
date — Форматирует вывод системной даты/времени
Описание
string date ( string $format [, int $timestamp = time() ] )
Возвращает строку, отформатированную в соответствии с указанным шаблоном format. Используется метка времени, заданная аргументом timestamp. или текущее системное время, если timestamp не задан. Таким образом, timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .
Список параметров
Смотрите также time()
Любые другие символы, встреченные в строке-шаблоне, будут выведены в результирующую строку без изменений. Z всегда возвращает 0 при использовании gmdate() .
Поскольку рассматриваемая функция принимает в качестве параметра временные метки типа integer. форматирующий символ u будет полезен только при использовании функции date_format() и пользовательских меток времени, созданных с помощью функции date_create() .
Необязательный параметр timestamp представляет собой integer метку времени, по умолчанию равную текущему локальному времени, если timestamp не указан. Другими словами, значение по умолчанию равно результату функции time() .
Возвращаемые значения
Возвращает отформатированную строку с датой. При передаче нечислового значения в качестве параметра timestamp будет возвращено FALSE и вызвана ошибка уровня E_WARNING .
No comments:
Post a Comment