Перейти к основному содержимому

Дата (Date)

Поле типа Дата используется для хранения календарных дат без учета времени.

Основные характеристики

  • Тип данных: Дата (без времени)
  • Формат хранения: ISO 8601 (YYYY-MM-DD)
  • Диапазон: От 1900-01-01 до 2100-12-31
  • Часовой пояс: Не учитывается (только дата)

Форматы отображения

Дату можно отображать в различных форматах:

  • DD.MM.YYYY — 25.11.2025 (европейский формат)
  • MM/DD/YYYY — 11/25/2025 (американский формат)
  • YYYY-MM-DD — 2025-11-25 (ISO формат)
  • D MMMM YYYY — 25 ноября 2025 (полный формат)
  • Относительный — "сегодня", "вчера", "3 дня назад"

Настройки поля

При создании поля типа "Дата" доступны следующие настройки:

  • Название поля: Отображаемое имя поля
  • Системное имя: Уникальный идентификатор для API
  • Описание: Подсказка для пользователей
  • Обязательное поле: Требовать заполнения
  • Значение по умолчанию: Автоматически подставляемая дата
    • Не задано
    • Текущая дата
    • Конкретная дата
  • Формат отображения: Выбор формата из списка
  • Автозаполнение: Автоматически устанавливать текущую дату при создании

Примеры использования

Дата рождения

{
"name": "birth_date",
"type": "date",
"required": true
}

Дата публикации

{
"name": "publish_date",
"type": "date",
"default": "today"
}

Срок выполнения

{
"name": "due_date",
"type": "date",
"required": true
}

Дата создания

{
"name": "created_date",
"type": "date",
"default": "today",
"readonly": true
}

Работа через API

Создание записи

const record = await emd.database.collection('tasks').create({
title: 'Подготовить отчет',
due_date: '2025-12-31'
});

// Или с объектом Date
const record = await emd.database.collection('tasks').create({
title: 'Подготовить отчет',
due_date: new Date('2025-12-31')
});

Поиск по дате

// Задачи с дедлайном 31 декабря 2025
const tasks = await emd.database.collection('tasks').find({
due_date: '2025-12-31'
});

// Задачи с дедлайном после определенной даты
const tasks = await emd.database.collection('tasks').find({
due_date: { $gt: '2025-11-25' }
});

// Задачи с дедлайном в диапазоне
const tasks = await emd.database.collection('tasks').find({
due_date: {
$gte: '2025-11-01',
$lte: '2025-11-30'
}
});

Обновление даты

await emd.database.collection('tasks').update(recordId, {
due_date: '2025-12-15'
});

Работа с текущей датой

// Установить текущую дату
await emd.database.collection('tasks').update(recordId, {
completed_date: new Date().toISOString().split('T')[0]
});

Операторы для полей даты

  • $eq — равно
  • $ne — не равно
  • $gt — позже (больше)
  • $gte — позже или равно
  • $lt — раньше (меньше)
  • $lte — раньше или равно
  • $in — входит в список дат
  • $nin — не входит в список дат

Специальные запросы

Задачи на сегодня

const today = new Date().toISOString().split('T')[0];
const tasks = await emd.database.collection('tasks').find({
due_date: today
});

Просроченные задачи

const today = new Date().toISOString().split('T')[0];
const overdueTasks = await emd.database.collection('tasks').find({
due_date: { $lt: today },
status: { $ne: 'Завершена' }
});

Задачи на эту неделю

const today = new Date();
const weekEnd = new Date(today);
weekEnd.setDate(today.getDate() + 7);

const tasks = await emd.database.collection('tasks').find({
due_date: {
$gte: today.toISOString().split('T')[0],
$lte: weekEnd.toISOString().split('T')[0]
}
});

Задачи за прошлый месяц

const now = new Date();
const monthStart = new Date(now.getFullYear(), now.getMonth() - 1, 1);
const monthEnd = new Date(now.getFullYear(), now.getMonth(), 0);

const tasks = await emd.database.collection('tasks').find({
created_date: {
$gte: monthStart.toISOString().split('T')[0],
$lte: monthEnd.toISOString().split('T')[0]
}
});

Сортировка по дате

// Сортировка по возрастанию (от старых к новым)
const tasks = await emd.database.collection('tasks')
.find()
.sort({ due_date: 1 });

// Сортировка по убыванию (от новых к старым)
const tasks = await emd.database.collection('tasks')
.find()
.sort({ due_date: -1 });

Рекомендации

  • Используйте тип Дата для календарных событий без привязки ко времени
  • Для событий с точным временем используйте тип Дата и время
  • Храните даты в формате ISO 8601 (YYYY-MM-DD)
  • Используйте автозаполнение для полей created_date
  • Для дедлайнов и сроков используйте валидацию (минимальная дата = сегодня)
  • Учитывайте часовые пояса пользователей при отображении

Отличие от других типов

  • Date vs DateTime: Date только для календарных дат, DateTime для точного времени
  • Date vs String: Date обеспечивает валидацию и специальные операторы сравнения
  • Date vs Number: Date для календарных дат, Number для временных меток (timestamp)