# DatetimeAdd `datetimeAdd` принимает значение даты и времени и добавляет к нему некоторую единицу времени. Эта функция полезна при работе с данными временных рядов, помеченными «началом» и «концом», например с данными о сеансах или подписках. | Синтаксис | Пример | | ---------------------------------------------------------------------------------- | --------------------------------------- | | `datetimeAdd(column, amount, unit)` | `datetimeAdd("2021-03-25", 1, "month")` | | Принимает значение метки времени или даты и добавляет к нему указанное количество единиц времени. | `2021-04-25` | ## Параметры `column` может быть любым из: - Имя столбца метки времени, - пользовательское выражение, которое возвращает [datetime](#accepted-data-types) или - строка в формате `"YYYY-MM-DD"` или `"YYYY-MM-DDTHH:MM:SS"` (как показано в примере выше). `unit` может быть любым из: - "год" - "квартал" - "месяц" - "день" - "час" - "минута" - "секунда" - "миллисекунда" `amount`: - Целое число или десятичное число. - Может быть отрицательным числом: `datetimeAdd("2021-03-25", -1, "month")` вернет `2021-04-25`. ## Расчет конечной даты Допустим, вы знаток кофе и хотите следить за свежестью зерен: | Кофе | Начало | Окончание | | ---------------------- | ----------------- | ----------------- | | DAK Honey Dude | October 31, 2022 | November 14, 2022 | | NO6 Full City Espresso | November 7, 2022 | November 21, 2022 | | Ghost Roaster Giakanja | November 27, 2022 | December 11, 2022 | Здесь **Окончание** — это настраиваемый столбец с выражением: ``` datetimeAdd([Opened On], 14, 'day') ``` ## Проверка, попадает ли текущее время между интервалом Допустим вы хотите проверить, попадает ли сегодняшняя дата между **Начальной датой** и [Датой конца](#calculating-an-end-date). Предположим, что сегодня — 1 декабря 2022 года. | Кофейня | Открытие | Закрытие | Все еще актуально сегодня | |------------------------|-------------------|-------------------|---------------------------| | DAK Honey Dude | October 31, 2022 | November 14, 2022 | No | | NO6 Full City Espresso | November 7, 2022 | November 21, 2022 | No | | Ghost Roaster Giakanja | November 27, 2022 | December 11, 2022 | Yes | **Закрытие** — это настраиваемый столбец с выражением: ``` datetimeAdd([Opened On], 14, 'day') ``` **Все еще актуально сегодня** использует [case](../expressions/case.md) для проверки, попадает ли текущая дата ([now](../expressions/now.md)) [между](../expressions-list.md#between) датами в **Открыто** и **Закрыто**: ``` case(between(now, [Opened On], [Finish By]), "Yes", "No") ``` ## Допустимые типы данных | [Тип данных](https://www.metabase.com/learn/databases/data-types-overview#Примерs-of-data-types) | Работает с `datetimeAdd` | |--------------------------------------------------------------------------------------------------| ------------------------ | | Строка | ❌ | | Число | ❌ | | Дата Время | ✅ | | Условие | ❌ | | JSON | ❌ | Мы используем «timestamp» и «datatime», чтобы говорить о любом временном типе данных, поддерживаемом GlarusBI. Для дополнительной информации о этих типах данных в GlarusBI см. [Часовые пояса](../../../configuring-metabase/timezones.md#data-types). Если ваши временные метки хранятся в базе данных в виде строк или чисел, администратор может [преобразовать их в временные метки](../../../data-modeling/metadata-editing.md#casting-to-a-specific-data-type) на странице "Метаданные таблиц". ## Ограничения Если вы используете MongoDB, `datetimeAdd` будет работать только в версии 5 и выше. ## Связанные функции В этом разделе рассматриваются функции и формулы, которые работают так же, как выражение `datetimeAdd` GlarusBI, с примечаниями о том, как выбрать лучший вариант для вашего случая использования. **[Выражения GlarusBI](../expressions-list.md)** - [Дата Время вычесть](#datetimesubtract) **Другие инструменты** - [SQL](#sql) - [Таблицы](#spreadsheets) - [Python](#python) ### Дата Время вычесть `datetimeSubtract` и `datetimeAdd` взаимозаменяемы, так как вы можете использовать отрицательное число для `amount`. Как правило, рекомендуется избегать двойных отрицаний (например, вычитания отрицательного числа). ``` datetimeSubtract([Opened On], -14, "day") ``` does the same thing as ``` datetimeAdd([Opened On], 14, "day") ``` ### SQL Когда вы запускаете вопрос с помощью [конструктора запросов](https://www.metabase.com/glossary/query_builder), GlarusBI преобразует ваши графические настройки запроса (фильтры, сводки и т. д.) в запрос и запускает этот запрос. против вашей базы данных, чтобы получить ваши результаты. Если наши [данные образца кофе](#calculating-an-end-date) хранятся в базе данных PostgreSQL: ```sql SELECT opened_on + INTERVAL '14 days' AS finish_by FROM coffee ``` эквивалентно выражению `datetimeAdd` в GlarusBI: ``` datetimeAdd([Opened On], 14, "day") ``` ### Таблицы Если наши [данные образца кофе](#calculating-an-end-date) находятся в электронной таблице, где «Открыто в» находится в столбце A с форматом даты, функция электронной таблицы ``` A:A + 14 ``` выдает такой же результат как и ``` datetimeAdd([Opened On], 14, "day") ``` Большинство инструментов электронных таблиц требуют использования разных функций для разных единиц времени (для Примера вы должны использовать другую функцию, чтобы добавить «месяцы» к дате). `datetimeAdd` упрощает преобразование всех этих функций в единый непротиворечивый синтаксис. ### Python Предполагая, что [данные образца кофе](#calculating-an-end-date) находятся в столбце данных `pandas` с именем `df`, вы можете импортировать модуль `datetime` и использовать функцию `timedelta`: ``` df['Finish By'] = df['Opened On'] + datetime.timedelta(days=14) ``` эквивалентно: ``` datetimeAdd([Opened On], 14, "day") ``` ## Дополнительная информация - [Документация по кастомным выражениям](../expressions.md) - [Руководство по кастомным выражениям. Документация Metabase](https://www.metabase.com/learn/questions/custom-expressions) - [Анализ временных рядов. Документация Metabase](https://www.metabase.com/learn/time-series/start)