Справочник языка
Сборка даты и календарные части
Год, месяц и день часто известны по отдельности — например, пришли из полей ввода, — и из них нужно собрать одно значение DATE. Обратная задача тоже встречается постоянно: из готовой даты требуется извлечь компонент или найти границу месяца и года. Ниже собраны функции сборки DATESERIAL, TIMESERIAL и DATETIMESERIAL, извлечения частей и определения календарных границ; синтаксис относится к разным функциям.
DATESERIAL
DATESERIAL возвращает дату, собранную из года, месяца и дня. Функция нужна для создания значения DATE, когда год, месяц и день получены отдельно; вызывать её можно в выражении консольной или графической программы, оператор SCREEN или CANVAS не требуется.
Синтаксис
DATESERIAL(<год>, <месяц>, <день>)
Аргументы
Все аргументы должны иметь тип INTEGER: год от 1 до 9999; месяц от 1 до 12; день от 1 до 31, существующий в указанном месяце.
Результат
Функция возвращает значение типа DATE.
Правила и ограничения
Лишние дни или месяцы не переносятся в соседний месяц или год; например, 29 февраля невисокосного года недопустимо.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT DATESERIAL(2024, 2, 29)Ожидаемый вывод:
2024-02-29
См. также
TIMESERIAL
Функция TIMESERIAL возвращает время суток, собранное из часа, минуты и секунды. Так создают значение TIME из отдельно вычисленных часа, минуты и секунды. Вызов допустим в выражении консольной и графической программы; оператор SCREEN или CANVAS не нужен.
Синтаксис
TIMESERIAL(<час>, <минута>, <секунда>)
Аргументы
Все аргументы INTEGER: час от 0 до 23, минута и секунда от 0 до 59.
Результат
Функция возвращает значение типа TIME.
Правила и ограничения
Избыточные компоненты не нормализуются. Час 24, отрицательные компоненты и секунда 60 недопустимы.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT TIMESERIAL(23, 59, 59)Ожидаемый вывод:
23:59:59
См. также
DATETIMESERIAL
DATETIMESERIAL возвращает дату и время, собранные из готовых значений DATE и TIME. Функция собирает одно значение DATETIME из календарной даты и времени суток, полученных по отдельности, без промежуточной текстовой записи. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
DATETIMESERIAL(<дата>, <время>)
Аргументы
Первый аргумент должен иметь тип DATE, второй — тип TIME. Оба аргумента обязательны. Строка с канонической записью принимается, потому что разбор выполняет сама функция; значение DATETIME вместо одного из аргументов не подходит, поскольку его пришлось бы молча усечь.
Результат
Функция возвращает значение типа DATETIME: календарную дату первого аргумента и время суток второго аргумента, включая доли секунды.
Правила и ограничения
Обе части переносятся целиком, поэтому потеря компонента не происходит. Часовой пояс не добавляется: результат остаётся календарным временем без пояса. Значение DATETIME, полученное функцией, сравнимо с любым другим DATETIME и участвует в арифметике на равных условиях. Для обратного разбора используют DATEVALUE и TIMEVALUE с аргументом DATETIME.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента, в том числе попытку передать DATETIME вместо DATE или TIME. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
DIM dayValue AS DATE = "2024-02-29"
DIM clockTime AS TIME = "12:34:56.125"
PRINT DATETIMESERIAL(dayValue, clockTime)Ожидаемый вывод:
2024-02-29 12:34:56.125
См. также
YEAR
YEAR возвращает год календарной даты. Так можно извлечь нужный календарный компонент или вычислить границу периода для исходной даты. Вызывается функция в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
YEAR(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип INTEGER от 1 до 9999.
Правила и ограничения
Время суток не влияет на результат: функция читает календарную часть и потому сама отбрасывает время суток у DATETIME. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT YEAR("2024-02-29")Ожидаемый вывод:
2024
См. также
MONTH
MONTH возвращает номер месяца календарной даты — например, чтобы извлечь нужный календарный компонент или вычислить границу периода для исходной даты. Вызов допустим в выражении консольной и графической программы, оператор SCREEN или CANVAS не нужен.
Синтаксис
MONTH(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип INTEGER от 1 до 12.
Правила и ограничения
Январь имеет номер 1.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT MONTH("2024-02-29")Ожидаемый вывод:
2
См. также
DAY
Функция DAY возвращает номер дня внутри месяца. Извлечь нужный календарный компонент или вычислить границу периода для исходной даты с её помощью можно прямо в выражении консольной или графической программы; оператор SCREEN или CANVAS не требуется.
Синтаксис
DAY(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип INTEGER от 1 до 31.
Правила и ограничения
Это день месяца, а не порядковый день года.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT DAY("2024-02-29")Ожидаемый вывод:
29
См. также
WEEKDAY
WEEKDAY возвращает номер дня недели. Функция позволяет извлечь нужный календарный компонент или вычислить границу периода для исходной даты и работает в выражениях консольных и графических программ без оператора SCREEN или CANVAS.
Синтаксис
WEEKDAY(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип INTEGER от 1 до 7.
Правила и ограничения
Понедельник имеет номер 1, воскресенье — 7. Аргумента первого дня недели нет.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT WEEKDAY("2024-02-29")Ожидаемый вывод:
4
См. также
STARTOFMONTH
STARTOFMONTH возвращает первый день месяца исходной даты. Через неё извлекают нужный календарный компонент или вычисляют границу периода для исходной даты. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
STARTOFMONTH(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип DATE.
Правила и ограничения
День результата равен 1.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT STARTOFMONTH("2024-02-20")Ожидаемый вывод:
2024-02-01
См. также
ENDOFMONTH
Функция ENDOFMONTH возвращает последний день месяца исходной даты. Ею пользуются, чтобы извлечь нужный календарный компонент или вычислить границу периода для исходной даты. Вызов допустим в выражении консольной и графической программы — оператор SCREEN или CANVAS не нужен.
Синтаксис
ENDOFMONTH(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип DATE.
Правила и ограничения
Февраль учитывает високосность года.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT ENDOFMONTH("2024-02-20")Ожидаемый вывод:
2024-02-29
См. также
STARTOFYEAR
STARTOFYEAR возвращает первый день года исходной даты. Функция даёт нужный календарный компонент или границу периода для исходной даты и вызывается в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
STARTOFYEAR(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип DATE.
Правила и ограничения
Возвращается 1 января того же года.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT STARTOFYEAR("2024-02-20")Ожидаемый вывод:
2024-01-01
См. также
ENDOFYEAR
ENDOFYEAR возвращает последний день года исходной даты — так извлекают нужный календарный компонент или вычисляют границу периода для исходной даты. Функция работает в выражениях консольных и графических программ, оператор SCREEN или CANVAS не требуется.
Синтаксис
ENDOFYEAR(<дата>)
Аргументы
Передайте DATE, DATETIME или STRING в точной форме yyyy-MM-dd либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только календарная часть; строка должна содержать действительную календарную дату.
Результат
Результат имеет тип DATE.
Правила и ограничения
Возвращается 31 декабря того же года.
У DATETIME функция читает только календарную часть и потому сама отбрасывает время суток. Другие временные виды не принимаются: значение TIME отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT ENDOFYEAR("2024-02-20")Ожидаемый вывод:
2024-12-31
См. также
HOUR
HOUR возвращает час времени суток. Функция позволяет отдельно прочитать компонент времени суток, например для проверки расписания. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
HOUR(<время>)
Аргументы
Передайте TIME, DATETIME или STRING в точной форме HH:mm:ss либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только время суток.
Результат
Результат INTEGER в диапазоне 0–23.
Правила и ограничения
Компонент не означает полную длительность; например, MINUTE не считает минуты от полуночи. У DATETIME функция читает только время суток и потому сама отбрасывает календарную дату. Другие временные виды не принимаются: значение DATE отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT HOUR("23:45:56")Ожидаемый вывод:
23
См. также
MINUTE
Функция MINUTE возвращает минуту внутри часа — отдельный компонент времени суток, который бывает нужен, например, для проверки расписания. Вызывать её можно в выражении консольной или графической программы, оператор SCREEN или CANVAS не нужен.
Синтаксис
MINUTE(<время>)
Аргументы
Передайте TIME, DATETIME или STRING в точной форме HH:mm:ss либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только время суток.
Результат
Результат INTEGER в диапазоне 0–59.
Правила и ограничения
Компонент не означает полную длительность; например, MINUTE не считает минуты от полуночи. У DATETIME функция читает только время суток и потому сама отбрасывает календарную дату. Другие временные виды не принимаются: значение DATE отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT MINUTE("23:45:56")Ожидаемый вывод:
45
См. также
SECOND
SECOND возвращает секунду внутри минуты. Через неё отдельно читают компонент времени суток, например для проверки расписания; вызов допустим в выражении консольной и графической программы без оператора SCREEN или CANVAS.
Синтаксис
SECOND(<время>)
Аргументы
Передайте TIME, DATETIME или STRING в точной форме HH:mm:ss либо yyyy-MM-dd HH:mm:ss. У DATETIME используется только время суток.
Результат
Результат INTEGER в диапазоне 0–59. Доли секунды в результат не входят.
Правила и ограничения
Компонент не означает полную длительность; например, MINUTE не считает минуты от полуночи. У DATETIME функция читает только время суток и потому сама отбрасывает календарную дату. Другие временные виды не принимаются: значение DATE отклоняется как несовместимый тип аргумента.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT SECOND("23:45:56")Ожидаемый вывод:
56
См. также
MONTHNAME
MONTHNAME возвращает английское название месяца — календарную характеристику, указанную в определении функции. Вызывается она в выражениях консольных и графических программ; оператор SCREEN или CANVAS не требуется.
Синтаксис
MONTHNAME(<номер месяца>)
Аргументы
Передайте INTEGER от 1 до 12, задающий номер месяца.
Результат
Функция возвращает значение типа STRING.
Правила и ограничения
Названия от January до December не зависят от языка интерфейса; краткой формы нет.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT MONTHNAME(2)Ожидаемый вывод:
February
См. также
WEEKDAYNAME
Функция WEEKDAYNAME возвращает английское название дня недели, то есть календарную характеристику, указанную в её определении. Вызов допустим в выражении консольной и графической программы; оператор SCREEN или CANVAS не нужен.
Синтаксис
WEEKDAYNAME(<номер дня недели>)
Аргументы
Передайте INTEGER от 1 до 7: понедельник имеет номер 1.
Результат
Функция возвращает значение типа STRING.
Правила и ограничения
Названия от Monday до Sunday не зависят от языка интерфейса; краткой формы нет.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT WEEKDAYNAME(7)Ожидаемый вывод:
Sunday
См. также
ISLEAPYEAR
ISLEAPYEAR возвращает признак високосности года. Это календарная характеристика, указанная в определении функции; вызывать её можно в выражении консольной или графической программы, оператор SCREEN или CANVAS не требуется.
Синтаксис
ISLEAPYEAR(<год>)
Аргументы
Передайте INTEGER от 1 до 9999, задающий календарный год.
Результат
Функция возвращает значение типа BOOLEAN.
Правила и ограничения
Используется григорианское правило: делимость на 4, исключение столетий, кроме делимых на 400.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT ISLEAPYEAR(2000)
PRINT ISLEAPYEAR(1900)Ожидаемый вывод:
TRUE
FALSE
См. также
DAYSINMONTH
DAYSINMONTH возвращает количество дней в месяце. Функция даёт календарную характеристику, указанную в её определении, и работает в выражениях консольных и графических программ без оператора SCREEN или CANVAS.
Синтаксис
DAYSINMONTH(<год>, <месяц>)
Аргументы
Передайте два INTEGER: год от 1 до 9999 и месяц от 1 до 12.
Результат
Результат INTEGER от 28 до 31.
Правила и ограничения
Февраль содержит 28 или 29 дней в зависимости от года.
Диагностика
Компилятор отклоняет неверное количество аргументов и несовместимый тип аргумента. MB3007 возникает при недопустимой строке, номере или календарной дате.
Пример
PRINT DAYSINMONTH(2024, 2)Ожидаемый вывод:
29