Дата и время (DateTime)
Поле типа Дата и время используется для хранения точных временных меток с учетом даты и времени.
Основные характеристики
- Тип данных: Дата и время (timestamp)
- Формат хранения: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)
- Часовой пояс: UTC (с возможностью конвертации для отображения)
- Точность: До миллисекунд
Форматы отображения
DateTime можно отображать в различных форматах:
- DD.MM.YYYY HH:mm — 25.11.2025 14:30
- MM/DD/YYYY hh:mm A — 11/25/2025 02:30 PM
- YYYY-MM-DD HH:mm:ss — 2025-11-25 14:30:00
- D MMMM YYYY, HH:mm — 25 ноября 2025, 14:30
- Относительный — "2 часа назад", "через 3 дня"
- Полный ISO — 2025-11-25T14:30:00.000Z
Настройки поля
При создании поля типа "Дата и время" доступны следующие настройки:
- Название поля: Отображаемое имя поля
- Системное имя: Уникальный идентификатор для API
- Описание: Подсказка для пользователей
- Обязательное поле: Требовать заполнения
- Значение по умолчанию:
- Не задано
- Текущая дата и время
- Конкретная дата и время
- Формат отображения: Выбор формата из списка
- Часовой пояс: Часовой пояс для отображения
- Включить секунды: Показывать секунды
- Автозаполнение: Автоматически устанавливать текущее время при создании
- Автообновление: Обновлять время при каждом изменении записи
Примеры использования
Время создания записи
{
"name": "created_at",
"type": "datetime",
"default": "now",
"readonly": true
}
Время последнего обновления
{
"name": "updated_at",
"type": "datetime",
"autoUpdate": true
}
Время начала события
{
"name": "event_start",
"type": "datetime",
"required": true
}
Дедлайн с точным временем
{
"name": "deadline",
"type": "datetime",
"required": true
}
Работа через API
Создание записи
const record = await emd.database.collection('events').create({
title: 'Встреча с клиентом',
event_start: '2025-11-25T14:30:00.000Z'
});
// Или с объектом Date
const record = await emd.database.collection('events').create({
title: 'Встреча с клиентом',
event_start: new Date('2025-11-25T14:30:00')
});
// Текущее время
const record = await emd.database.collection('logs').create({
message: 'Пользователь вошел в систему',
timestamp: new Date()
});
Поиск по дате и времени
// События, начинающиеся после определенного времени
const events = await emd.database.collection('events').find({
event_start: { $gt: '2025-11-25T12:00:00.000Z' }
});
// События в диапазоне времени
const events = await emd.database.collection('events').find({
event_start: {
$gte: '2025-11-25T09:00:00.000Z',
$lte: '2025-11-25T18:00:00.000Z'
}
});
Обновление времени
await emd.database.collection('events').update(recordId, {
event_start: '2025-11-25T15:00:00.000Z'
});
// Установить текущее время
await emd.database.collection('tasks').update(recordId, {
completed_at: new Date()
});
Операторы для полей DateTime
$eq— равно$ne— не равно$gt— позже (больше)$gte— позже или равно$lt— раньше (меньше)$lte— раньше или равно
Специальные запросы
События на сегодня
const startOfDay = new Date();
startOfDay.setHours(0, 0, 0, 0);
const endOfDay = new Date();
endOfDay.setHours(23, 59, 59, 999);
const events = await emd.database.collection('events').find({
event_start: {
$gte: startOfDay,
$lte: endOfDay
}
});
Записи за последний час
const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);
const records = await emd.database.collection('logs').find({
created_at: { $gte: oneHourAgo }
});
События на этой неделе
const now = new Date();
const startOfWeek = new Date(now);
startOfWeek.setDate(now.getDate() - now.getDay());
startOfWeek.setHours(0, 0, 0, 0);
const endOfWeek = new Date(startOfWeek);
endOfWeek.setDate(startOfWeek.getDate() + 7);
const events = await emd.database.collection('events').find({
event_start: {
$gte: startOfWeek,
$lte: endOfWeek
}
});
Записи старше 30 дней
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
const oldRecords = await emd.database.collection('logs').find({
created_at: { $lt: thirtyDaysAgo }
});
Работа с часовыми поясами
Конвертация в локальный часовой пояс
const record = await emd.database.collection('events').get(recordId);
const localTime = new Date(record.event_start).toLocaleString('ru-RU', {
timeZone: 'Europe/Moscow'
});
Сохранение с учетом часового пояса
// Пользователь вводит время в своем часовом поясе
const userInput = '2025-11-25 14:30'; // Время в Москве
const moscowTime = new Date(userInput + ' GMT+0300');
await emd.database.collection('events').create({
title: 'Встреча',
event_start: moscowTime.toISOString() // Сохраняется в UTC
});
Сортировка по времени
// От старых к новым
const events = await emd.database.collection('events')
.find()
.sort({ event_start: 1 });
// От новых к старым
const logs = await emd.database.collection('logs')
.find()
.sort({ created_at: -1 });
Вычисления с датами
Длительность события
const record = await emd.database.collection('events').get(recordId);
const start = new Date(record.event_start);
const end = new Date(record.event_end);
const durationMs = end - start;
const durationHours = durationMs / (1000 * 60 * 60);
Добавление времени
const now = new Date();
const inOneWeek = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
await emd.database.collection('tasks').update(recordId, {
deadline: inOneWeek
});
Автоматические поля
created_at и updated_at
// Эти поля можно настроить для автоматического заполнения
{
"name": "created_at",
"type": "datetime",
"default": "now",
"readonly": true
}
{
"name": "updated_at",
"type": "datetime",
"autoUpdate": true
}
Рекомендации
- Всегда храните время в UTC, конвертируйте для отображения
- Используйте автозаполнение для полей
created_at - Используйте автообновление для полей
updated_at - Для календарных событий без точного времени используйте тип Дата
- Учитывайте часовые пояса при работе с международными пользователями
- Используйте ISO 8601 формат для передачи дат через API
- Для хранения длительности используйте тип Число (в секундах или минутах)
Отличие от других типов
- DateTime vs Date: DateTime для точного времени, Date только для календарных дат
- DateTime vs Number: DateTime для читаемых дат, Number (timestamp) для вычислений
- DateTime vs String: DateTime обеспечивает валидацию и специальные операторы
Форматирование для разных локалей
const record = await emd.database.collection('events').get(recordId);
const date = new Date(record.event_start);
// Русский формат
console.log(date.toLocaleString('ru-RU'));
// 25.11.2025, 14:30:00
// Американский формат
console.log(date.toLocaleString('en-US'));
// 11/25/2025, 2:30:00 PM
// ISO формат
console.log(date.toISOString());
// 2025-11-25T14:30:00.000Z