Функции даты¶
AQL предлагает функциональность для работы с датами, но не имеет специального типа данных для дат (как и JSON, который обычно используется в качестве формата для передачи данных в ArangoDB и обратно). Вместо этого даты в AQL представляются либо числами, либо строками.
Все операции с датами выполняются в системе Unix time. Время Unix отсчитывает все невисокосные секунды, начиная с 1 января 1970 года 00:00:00.000 UTC, также известное как эпоха Unix. Точка во времени называется временной меткой. Временная метка имеет одно и то же значение в каждой точке Земли. Функции даты используют миллисекундную точность для временных меток.
Определения единиц времени:
- миллисекунда: 1/1000 секунды
- секунда: одна секунда СИ
- минута: одна минута определяется как 60 секунд
- час: один час определяется как 60 минут
- день: один день определяется как 24 часа
- неделя: одна неделя определяется как 7 дней
- месяц: один месяц определяется как 1/12 часть года
- год: один год равен 365,2425 дня.
Все функции, требующие в качестве аргументов даты, принимают следующие входные значения:
-
числовые временные метки, точность миллисекунд.
Пример значения временной метки -
1399472349522
, что переводится как2014-05-07T14:19:09.522Z
.Допустимый диапазон:
-62167219200000
...253402300799999
(включительно) -
строки даты-времени в формате ISO 8601:
YYYY-MM-DDTHH:MM:SS.MMM
.YYYY-MM-DDHH:MM:SS.MMM
ГГГГ-ММ-ДД
Миллисекунды (
.МММ
) всегда необязательны. Две цифры для часов (HH
), минут (MM
) и секунд (SS
) являются обязательными, т.е. для значений от 0 до 9 требуется добавление нуля (например,05
вместо5
). Ведущие нули для года (YYYY
), месяца (MM
) и дня (DD
) можно не указывать, но это не рекомендуется.В конце строки по желанию может быть добавлено смещение времени с указанием часов и минут, которые нужно прибавить или вычесть к значению времени даты. Например,
2014-05-07T14:19:09+01:00
может использоваться для указания смещения на один час, а2014-05-07T14:19:09+07:30
- для смещения на семь с половиной часов. Возможны также отрицательные смещения. В качестве альтернативы смещению можно использоватьZ
для указания времени UTC / Zulu. Пример значения:2014-05-07T14:19:09.522Z
означает 7 мая 2014 года, 14:19:09 и 522 миллисекунды, время UTC / Zulu. Другой пример значения без компонента времени -2014-05-07Z
.Допустимый диапазон:
"0000-01-01T00:00:00.000Z"
..."9999-12-31T23:59:59.999Z"
(включительно).
Любые значения даты/времени вне допустимого диапазона, переданные в функцию даты AQL, заставят функцию вернуть null
и вызовут предупреждение для запроса, которое может быть переведено в ошибку и прервать запрос. Это также относится к операциям, которые выдают недопустимое значение.
1 2 |
|
Конечно, вы можете хранить определения возраста образцов, неполные или нечеткие даты и т.п. другими, более подходящими способами. Функции даты AQL для таких дат, конечно, не помогут, но вы можете использовать такие конструкции языка, как SORT (который также поддерживает сортировку массивов) и indexes.
Текущая дата и время¶
DATE_NOW()¶
DATE_NOW() → timestamp
Получение текущего времени unix в виде числовой метки времени.
- возвращает timestamp (число): текущее время unix в виде временной метки. Возвращаемое значение имеет миллисекундную точность. Чтобы преобразовать возвращаемое значение в секунды, разделите его на 1000.
Обратите внимание, что эта функция оценивается при каждом вызове и может возвращать разные значения при многократном вызове в одном и том же запросе. Чтобы использовать одну и ту же временную метку несколько раз, присвойте ее переменной.
Преобразование¶
DATE_TIMESTAMP() и DATE_ISO8601() могут использоваться для преобразования строк времени даты ISO 8601 в числовые временные метки и числовых временных меток в строки времени даты ISO 8601.
Обе функции также поддерживают отдельные компоненты даты как отдельные аргументы функции, в следующем порядке:
- год
- месяц
- день
- час
- минута
- секунда
- миллисекунда
Все компоненты после day являются необязательными и могут быть опущены. Обратите внимание, что при использовании отдельных компонентов даты не может быть задано смещение времени, и будет использоваться время UTC / Zulu.
Следующие вызовы DATE_TIMESTAMP() эквивалентны и все вернут 1399472349522:
1 2 3 4 5 6 |
|
То же самое справедливо для вызовов DATE_ISO8601(), которые также принимают переменные форматы ввода:
1 2 3 4 |
|
Все приведенные выше функции эквивалентны и вернут "2014-05-07T14:19:09.522Z ".
DATE_ISO8601()¶
DATE_ISO8601(date) → dateString
.
Возвращает строку времени даты ISO 8601 из date. Строка времени даты всегда будет использовать время UTC / Zulu, на что указывает Z в ее конце.
- date (number|string): числовая метка времени или строка времени даты ISO 8601
- возвращает dateString: дату и время, выраженные в соответствии с ISO 8601, во времени Зулу.
DATE_ISO8601(год, месяц, день, час, минута, секунда, миллисекунда) → dateString
Возвращает строку времени даты ISO 8601 из date, но позволяет указать отдельные компоненты даты отдельно. Все параметры после day являются необязательными.
- год (число): обычно в диапазоне 0...9999, например, 2017.
- месяц (число): 1...12 для января-декабря.
- день (число): 1...31 (верхняя граница зависит от количества дней в месяце)
- час (число, опционально): 0..23
- минута (число, опционально): 0..59
- секунда (число, опционально): 0..59
- миллисекунды (число, опционально): 0..999
- возвращает dateString: дату и время, выраженные в соответствии с ISO 8601, в зулусском времени
DATE_TIMESTAMP()¶
DATE_TIMESTAMP(date) → timestamp
Создает значение временной метки из даты. Возвращаемое значение имеет миллисекундную точность. Чтобы преобразовать возвращаемое значение в секунды, разделите его на 1000.
- date (число|строка): числовая временная метка или строка времени даты ISO 8601
- возвращает timestamp (число): числовая временная метка
DATE_TIMESTAMP(год, месяц, день, час, минута, секунда, миллисекунда) → timestamp
Создает значение временной метки, но позволяет указать отдельные компоненты даты отдельно. Все параметры после day являются необязательными.
- год (число): обычно в диапазоне 0...9999, например 2017.
- месяц (число): 1...12 для января-декабря.
- день (число): 1...31 (верхняя граница зависит от количества дней в месяце)
- час (число, опционально): 0..23
- минута (число, опционально): 0..59
- секунда (число, опционально): 0..59
- миллисекунды (число, опционально): 0..999
- возвращает timestamp (число): числовая метка времени.
Отрицательные значения не допускаются, приводят к null и вызывают предупреждение. Значения, превышающие верхнюю границу диапазона, переполняются на большие компоненты (например, час из 26 автоматически превращается в дополнительный день и два часа):
1 2 3 |
|
IS_DATESTRING()¶
IS_DATESTRING(value) → bool
Проверяет, подходит ли произвольная строка для интерпретации в качестве строки даты-времени.
- значение (строка): произвольная строка
- возвращает bool (bool): true, если value является строкой, которая может быть использована в функции даты. Сюда входят неполные даты, такие как 2015 или 2015-10, а также строки, содержащие недопустимые даты, такие как 2015-02-31. Функция вернет false для всех нестроковых значений, даже если некоторые из них могут быть использованы в функции даты.
Обработка¶
DATE_DAYOFWEEK()¶
DATE_DAYOFWEEK(date) → WeekdayNumber
Возвращает номер дня недели даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает weekdayNumber (число): 0...6 следующим образом:
- 0 - воскресенье
- 1 - понедельник
- 2 - вторник
- 3 - среда
- 4 - четверг
- 5 - пятница
- 6 - суббота
ДАТА_ГОД()¶
DATE_YEAR(дата) → год
Возвращает год даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает год (число): часть года даты в виде числа.
ДАТА_МЕСЯЦ()¶
DATE_MONTH(дата) → месяц
Возвращает месяц даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает месяц (число): месячную часть даты в виде числа.
ДАТА_ДЕНЬ()¶
DATE_DAY(date) → day
Возвращает день даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает day (число): дневную часть даты в виде числа.
DATE_HOUR()¶
Возвращает час даты.
DATE_HOUR(дата) → час
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает час (число): часовую часть даты в виде числа.
DATE_MINUTE()¶
DATE_MINUTE(date) → minute
Возвращает минуту от даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает минуту (число): минутную часть даты в виде числа.
ДАТА_СЕКУНДА()¶
DATE_SECOND(date) → second
Возвращает второе значение даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает секунду (число): секундную часть даты в виде числа.
DATE_MILLISECOND()¶
DATE_MILLISECOND(date) → миллисекунда
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает миллисекунду (число): часть даты в миллисекундах в виде числа
DATE_DAYOFYEAR()¶
DATE_DAYOFYEAR(date) → dayOfYear
.
Возвращает день года даты.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает dayOfYear (число): номер дня года даты. Возвращаемые значения варьируются от 1 до 365, или 366 в високосном году соответственно.
DATE_ISOWEEK()¶
DATE_ISOWEEK(date) → weekDate
Возвращает дату недели date в соответствии с ISO 8601.
- date (number|string): числовая метка времени или строка времени даты по ISO 8601
- возвращает weekDate (число): дата недели по ISO для даты. Возвращаемые значения варьируются от 1 до 53. Первым днем недели считается понедельник. Дробных недель не существует, поэтому последние дни декабря могут относиться к первой неделе следующего года, а первые дни января могут быть частью последней недели предыдущего года.
DATE_LEAPYEAR()¶
DATE_LEAPYEAR(date) → leapYear
.
Возвращает, находится ли дата в високосном году.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает leapYear (bool): true если дата находится в високосном году, false в противном случае.
DATE_QUARTER()¶
DATE_QUARTER(дата) → квартал
Возвращает, к какому кварталу относится дата.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает квартал (число): квартал данной даты (на основе 1):
- 1 - январь, февраль, март
- 2 - апрель, май, июнь
- 3 - июль, август, сентябрь
- 4 - октябрь, ноябрь, декабрь
DATE_DAYS_IN_MONTH()¶
Возвращает количество дней в месяце даты.
DATE_DAYS_IN_MONTH(date) → daysInMonth
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- возвращает daysInMonth (число): количество дней в месяце даты (28..31)
DATE_TRUNC()¶
DATE_TRUNC(date, unit) → isoDate
.
Усекает заданную дату после единицы и возвращает измененную дату.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- unit (строка): одно из следующих значений для указания единицы времени (без учета регистра):
- y, год, годы
- m, месяц, месяцы
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
- возвращает isoDate (строка): усеченную строку времени даты ISO 8601.
1 2 |
|
DATE_ROUND()¶
DATE_ROUND(date, amount, unit) → isoDate
.
Разбивает дату/время на множество равноудаленных друг от друга ведер, используемых для группировки.
- дата (строка|число): строка даты или метка времени.
- сумма (число): количество единиц. Должно быть целое положительное значение.
- единица (строка): одно из следующих значений для указания единицы времени (без учета регистра):
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
- возвращает isoDate (строка): округленную по ISO 8601 строку времени даты
1 2 |
|
DATE_FORMAT()¶
DATE_FORMAT(date, format) → str
Форматирует дату в соответствии с заданной строкой формата.
- дата (строка|число): строка даты или метка времени.
- формат (строка): строка формата, см. ниже
- возвращает str (строка): отформатированную строку даты
format поддерживает следующие заполнители (нечувствительные к регистру):
- %t - временная метка, в миллисекундах с полуночи 1970-01-01.
- %z - дата ISO (0000-00-00T00:00:00.000Z)
- %w - день недели (0..6)
- %y - год (0..9999)
- %yy - год (00..99), сокращенно (последние две цифры)
- %yyyy - год (0000..9999), заполненный до длины 4
- %yyyyyy - год (-009999 ... +009999), с префиксом знака и заполнением до длины 6
- %m - месяц (1..12)
- %mm - месяц (01..12), заполненный до длины 2
- %d - день (1..31)
- %dd - день (01..31), заполненный до длины 2
- %h - час (0..23)
- %hh - час (00..23), заполненный до длины 2
- %i - минута (0..59)
- %ii - минута (00..59), заполненная до длины 2
- %s - секунда (0..59)
- %ss - секунда (00..59), заполненная до длины 2
- %f - миллисекунда (0..999)
- %fff - миллисекунда (000...999), заполненная до длины 3
- %x - день года (1..366)
- %xxx - день года (001..366), заполненный до длины 3
- %k - дата недели ISO (1..53)
- %kk - дата недели ISO (01..53), заполненная до длины 2
- %l - високосный год (0 или 1)
- %q - квартал (1..4)
- %a - дни в месяце (28..31)
- %mmm - сокращенное английское название месяца (янв...дек.)
- %mmmm - английское название месяца (январь...декабрь)
- %www - сокращенное английское название дня недели (Sun..Sat)
- %www - английское название дня недели (воскресенье... суббота)
- %& - специальная управляющая последовательность для редких случаев
- %% - буквальный %
- % - игнорируется
%yyy
не обеспечивает длину 4 для годов до 0 и после 9999. Вместо этого будет использоваться тот же формат, что и для %yyyyy
. %yyy
сохраняет знак для отрицательных годов и может возвращать 3 символа в целом.
Одиночные символы %
будут проигнорированы. Используйте %%
для буквального %
. Для разрешения неоднозначности, как в %mmonth
(номер месяца без вставки + строка "месяц") между %mm
+ "onth" и %m
+ "month", используйте экранирующую последовательность %&
: %m%&month
.
Обратите внимание, что DATE_FORMAT() является довольно дорогостоящей операцией и может не подходить для больших наборов данных (например, более 1 миллиона дат). Если возможно, избегайте форматирования дат на стороне сервера и предоставьте это клиенту. Эта функция должна использоваться только для специальных сравнений дат или для хранения отформатированных дат в базе данных. Для повышения производительности используйте примитивные функции DATE_*()
вместе с CONCAT()
, если это возможно.
Примеры:
1 2 3 4 5 |
|
Сравнение и вычисление¶
DATE_ADD()¶
DATE_ADD(дата, сумма, единица) → isoDate
.
Добавляет сумму, указанную в единице, к дате и возвращает вычисленную дату.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- amount (number|string): количество единиц для сложения (положительное значение) или вычитания (отрицательное значение). Рекомендуется использовать только положительные значения, а для вычитания использовать DATE_SUBTRACT().
- unit (строка): одно из следующих значений для указания единицы времени для сложения или вычитания (нечувствительно к регистру):
- y, год, годы
- m, месяц, месяцы
- w, неделя, недели
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
- возвращает isoDate (строка): вычисленная по стандарту ISO 8601 строка времени даты
1 2 3 4 5 6 |
|
DATE_ADD(date, isoDuration) → isoDate
Вы также можете передать строку продолжительности ISO как сумму и опустить единицу.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- isoDuration (строка): строка длительности ISO 8601 для добавления к дате, см. ниже
- возвращает isoDate (строка): вычисленную строку времени даты ISO 8601.
Формат P_Y_M_W_DT_H_M_._S
, где символы подчеркивания обозначают цифры, а буквы - временные интервалы, за исключением разделителей P
(точка) и T
(время). Значение остальных букв следующее:
- Y - годы
- М - месяцы (если до Т)
- W - недели
- Д - дни
- Ч - часы
- M - минуты (если после T)
- S - секунды (опционально с 3 десятичными знаками для миллисекунд).
Строка должна иметь префикс P
. Разделитель T
требуется только в том случае, если указаны H
, M
и/или S
. Вам нужно указать только необходимые пары букв и цифр.
1 2 3 4 5 6 |
|
DATE_SUBTRACT()¶
DATE_SUBTRACT(date, amount, unit) → isoDate
Вычитает сумму, заданную в единицах, из даты и возвращает вычисленную дату.
Работает так же, как DATE_ADD(), за исключением вычитания. Это эквивалентно вызову DATE_ADD() с отрицательной суммой, за исключением того, что DATE_SUBTRACT() может также вычитать длительности ISO. Обратите внимание, что отрицательные значения длительности ISO не поддерживаются (т.е. начинающиеся с -P
, например -P1Y
).
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601.
- сумма (число|строка): количество единиц для вычитания (положительное значение) или сложения (отрицательное значение). Рекомендуется использовать только положительные значения, а для прибавления использовать DATE_ADD().
- unit (строка): одно из следующих значений для указания единицы времени для сложения или вычитания (нечувствительно к регистру):
- y, год, годы
- m, месяц, месяцы
- w, неделя, недели
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
- возвращает isoDate (строка): вычисленная по стандарту ISO 8601 строка времени даты
DATE_SUBTRACT(date, isoDuration) → isoDate
Вы также можете передать строку продолжительности ISO как сумму и опустить единицу.
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- isoDuration (строка): строка длительности ISO 8601 для вычитания из даты, см. ниже
- возвращает isoDate (строка): вычисленную строку времени даты ISO 8601.
Формат: P_Y_M_W_DT_H_M_._S
, где символы подчеркивания обозначают цифры, а буквы - временные интервалы, за исключением разделителей P
(точка) и T
(время). Значение остальных букв следующее:
- Y - годы
- М - месяцы (если до Т)
- W - недели
- Д - дни
- Ч - часы
- M - минуты (если после T)
- S - секунды (опционально с 3 десятичными знаками для миллисекунд).
Строка должна иметь префикс P
. Разделитель T
требуется только в том случае, если указаны H
, M
и/или S
. Вам нужно указать только необходимые пары букв и цифр.
1 2 3 4 5 |
|
DATE_DIFF()¶
DATE_DIFF(date1, date2, unit, asFloat) → diff
Вычисляет разницу между двумя датами в заданной единице времени, опционально с десятичными знаками.
- date1 (number|string): числовая метка времени или строка времени даты ISO 8601.
- дата2 (число|строка): числовая метка времени или строка времени даты ISO 8601
- unit (строка): одно из следующих значений для указания единицы времени, в которой возвращается разница (нечувствительно к регистру):
- y, год, годы
- m, месяц, месяцы
- w, неделя, недели
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
- asFloat (boolean, optional): если установлено значение true, десятичные знаки будут сохранены в результате. По умолчанию false и возвращается целое число.
- возвращает diff (число): вычисленную разность как число в единицах. Значение будет отрицательным, если дата2 раньше даты1.
DATE_COMPARE()¶
DATE_COMPARE(date1, date2, unitRangeStart, unitRangeEnd) → bool
Проверяет, совпадают ли две частичные даты.
- date1 (число|строка): числовая метка времени или строка времени даты ISO 8601
- дата2 (число|строка): числовая метка времени или строка времени даты ISO 8601
- unitRangeStart (строка): единица измерения, с которой следует начинать, см. ниже
- unitRangeEnd (строка, опционально): единица, с которой следует заканчивать, опустите, чтобы сравнивать только компонент, указанный в unitRangeStart. Возникает ошибка, если unitRangeEnd является единицей перед unitRangeStart.
- возвращает bool (bool): true, если даты совпадают, false в противном случае.
Сравниваемые части определяются диапазоном единиц времени. Полный диапазон таков: годы, месяцы, дни, часы, минуты, секунды, миллисекунды (в таком порядке).
Сравниваться будут все компоненты дата1 и дата2, указанные в диапазоне. Вы можете ссылаться на единицы измерения как:
- y, год, годы
- m, месяц, месяцы
- d, день, дни
- h, час, часы
- i, минута, минуты
- s, секунда, секунды
- f, миллисекунда, миллисекунды
1 2 3 4 5 6 7 8 9 |
|
Вы можете напрямую сравнивать строки даты ISO, если хотите найти даты до или после определенной даты, или между двумя датами (>=
, >
, <
, <=
). Специальная функция для работы с датами не требуется. Однако тесты равенства (==
и !=
) будут соответствовать только точно таким же дате и времени. Вы можете использовать SUBSTRING()
для сравнения неполных строк дат, DATE_COMPARE()
- это, по сути, удобная функция для этого. Однако ни то, ни другое не требуется, чтобы ограничить поиск определенным днем, как показано здесь:
1 2 3 |
|
Каждая дата ISO в этот день больше или равна 2015-05-15
при строковом сравнении (например, 2015-05-15T11:30:00.000Z
). Даты до 2015-05-15
меньше и поэтому отфильтровываются первым условием. Каждая дата после 2015-05-15
больше этой даты в строковом сравнении и поэтому отфильтровывается вторым условием. В результате компоненты времени в датах, с которыми производится сравнение, "игнорируются". Запрос вернет каждый документ с датой в диапазоне от 2015-05-15T00:00:00.000Z
до 2015-05-15T23:99:99.999Z
. Он также будет включать 2015-05-15T24:00:00.000Z
, но эта дата на самом деле 2015-05-16T00:00:00.000Z
и может возникнуть только при ручной вставке (вы можете захотеть передать даты через DATE_ISO8601(), чтобы обеспечить правильное представление даты).
Високосные дни в високосные годы (29 февраля) всегда должны обрабатываться вручную, если вам это необходимо (например, проверка дней рождения):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
DATE_UTCTOLOCAL()¶
Введена в: v3.8.0
Конвертирует дату, заданную в зулусском времени (UTC), в местное время.
Учитывает исторический переход на летнее время.
DATE_UTCTOLOCAL(date, timezone, zoneinfo) → date
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- временная зона (строка): имя часового пояса IANA, например,
Америка/Нью_Йорк
,Европа/Берлин
илиUTC
. Используйте"America/Los_Angeles"
для тихоокеанского времени (PST/PDT). Выбросит ошибку, если часовой пояс не известен ArangoDB - zoneinfo (boolean, опционально): если установлено значение true, возвращается объект с информацией о часовом поясе. По умолчанию false и возвращается строка даты.
- возвращает дата (строка|объект): строку времени даты ISO 8601 в неквалифицированном местном времени или объект со следующими атрибутами:
- local (string): строка времени даты ISO 8601 в неквалифицированном местном времени.
- tzdb (строка): версия используемой базы данных часовых поясов (например,
2020f
) - zoneInfo: (объект): информация о часовом поясе
- name (string): аббревиатура часового пояса (GMT, PST, CET, ...)
- begin (string|null): начало действия часового пояса как строки времени даты UTC
- end (string|null): конец эффекта временной зоны как строка времени даты UTC
- dst (boolean): true, когда летнее время (DST) активно, false в противном случае.
- offset (число): смещение к UTC в секундах.
DATE_LOCALTOUTC()¶
Введено в: v3.8.0
Конвертирует дату, принятую в местном временном поясе, в зулусское время (UTC).
Учитывает исторический переход на летнее время.
DATE_LOCALTOUTC(date, timezone, zoneinfo) → date
- дата (число|строка): числовая метка времени или строка времени даты ISO 8601
- временная зона (строка): имя часового пояса IANA, например,
Америка/Нью_Йорк
,Европа/Берлин
илиUTC
. Используйте"America/Los_Angeles"
для тихоокеанского времени (PST/PDT). Выбросит ошибку, если часовой пояс не известен ArangoDB - zoneinfo (boolean, опционально): если установлено значение true, возвращается объект с информацией о часовом поясе. По умолчанию false и возвращается строка даты.
- возвращает date (string|object): строку времени даты ISO 8601 в зулусском времени (UTC), или объект со следующими атрибутами:
- utc (строка): строка времени даты ISO 8601 в зулусском времени (UTC).
- tzdb (строка): версия используемой базы данных часовых поясов (например,
2020f
) - zoneInfo: (объект): информация о часовом поясе
- name (string): аббревиатура часового пояса (GMT, PST, CET, ...)
- begin (string|null): начало влияния часового пояса как строки времени даты UTC
- end (string|null): конец эффекта временной зоны как строка времени даты UTC
- dst (boolean): true, когда летнее время (DST) активно, false в противном случае.
- offset (число): смещение к UTC в секундах.
DATE_TIMEZONE()¶
Введено в: v3.8.0
Возвращает системный часовой пояс, в котором работает ArangoDB.
Для облачных серверов это, скорее всего, будет "Etc/UTC".
DATE_TIMEZONE() → timezone
- возвращает timezone (строка): имя часового пояса IANA часовой пояс сервера.
DATE_TIMEZONES()¶
Введено в: v3.8.0
Возвращает все допустимые имена часовых поясов.
DATE_TIMEZONES() → timezones
- возвращает timezones (массив): массив имен часовых поясов IANA
Работа с датами и индексами¶
Существует два рекомендуемых способа хранения временных меток в ArangoDB:
- строка: временная метка UTC с ISO 8601
- число: unix timestamp с точностью до миллисекунды.
Порядок сортировки обоих типов идентичен благодаря свойствам сортировки строк дат ISO. Однако вы не можете смешивать оба типа, числа и строки, в одном атрибуте.
Вы можете использовать persistent indexes с обоими типами дат. При выборе строковых представлений вы можете работать со строковыми сравнениями (меньше чем, больше чем и т.д.) для выражения временных диапазонов в ваших запросах, используя при этом постоянные индексы:
Первая и последняя временные метки в массиве исключаются из результата с помощью FILTER
.
Ограничения¶
Обратите внимание, что даты до 1583 года не допускаются стандартом ISO 8601 по умолчанию, так как они лежат до официального введения григорианского календаря и поэтому могут быть неправильными или недействительными. Все функции даты AQL применяют одни и те же правила к каждой дате по григорианской календарной системе, даже если она не соответствует действительности. Это не представляет проблемы, если только вы не имеете дело с датами до 1583 года и особенно с годами до нашей эры. Стандарт допускает отрицательные годы, но требует особого отношения и к положительным годам, если используются отрицательные годы (например, +002015-05-15
и -000753-01-01
). Однако это редко используется, и AQL не использует 7-символьную версию для лет от 0 до 9999 в строках ISO. Имейте в виду, что их нельзя корректно сравнивать с датами вне этого диапазона. Сортировка отрицательных дат не приводит к осмысленному порядку, при этом годы более давние оказываются последними, но месяцы, дни и компоненты времени располагаются в правильном порядке.
Високосные секунды игнорируются, как и в JavaScript согласно ECMAScript Language Specifications.