Извлечение даты из MongoDB ObjectId
Извлечение и декодирование встроенной временной метки из MongoDB ObjectId для определения времени создания документа
Ввод
Вывод
Документация
Что такое MongoDB ObjectId?
MongoDB ObjectId — это уникальный идентификатор длиной 12 байт (24 шестнадцатеричных символа), используемый в качестве значения поля _id по умолчанию для каждого документа в коллекции MongoDB. Его структура не является случайной — она кодирует значимую информацию. Первые четыре байта хранят Unix-временную метку, соответствующую секунде создания ObjectId. Оставшиеся байты содержат случайное значение и инкрементный счётчик, гарантирующий уникальность даже при вставке нескольких документов в одну и ту же секунду на одной машине.
Поскольку временная метка создания встроена непосредственно в идентификатор, можно точно определить, когда был создан документ, без необходимости хранить отдельное поле createdAt.
Как встроена временная метка
ObjectId вида 507f1f77bcf86cd799439011 расшифровывается следующим образом:
| Байты | Шестнадцатеричные символы | Назначение |
|---|---|---|
| 1–4 | 507f1f77 |
Unix-временная метка (секунды с начала эпохи) |
| 5–9 | bcf86cd799 |
Случайное значение (уникальное для машины/процесса) |
| 10–12 | 439011 |
Инкрементный счётчик |
Преобразование первых восьми шестнадцатеричных символов 507f1f77 в десятичное число даёт 1350844279, что соответствует 2012-10-21T21:17:59.000Z.
Описание инструмента
Этот инструмент извлекает встроенную временную метку из любого корректного MongoDB ObjectId и отображает её в нескольких форматах даты. Вставьте ObjectId и мгновенно получите дату в формате ISO 8601, дату в UTC, локальную дату и необработанную Unix-временную метку — без подключения к базе данных и написания кода.
Примеры
| Входной ObjectId | Извлечённая дата (UTC) |
|---|---|
507f1f77bcf86cd799439011 |
2012-10-21T21:17:59.000Z |
65a1fc2b0000000000000000 |
2024-01-13T04:44:27.000Z |
000000000000000000000000 |
1970-01-01T00:00:00.000Z |
Возможности
- Мгновенное извлечение: результаты отображаются по мере ввода — нажимать кнопки не нужно
- Несколько форматов: отображаются ISO 8601, UTC, локальные дата и время, а также Unix-временная метка
- Валидация ввода: отклоняет всё, что не является корректной шестнадцатеричной строкой из 24 символов
- Без зависимостей: работает полностью в браузере без обращений к серверу и внешних библиотек
- Готовый к копированию вывод: каждое поле вывода можно скопировать отдельно
Сценарии использования
- Отладка: быстро проверить, когда был вставлен документ, без запроса к базе данных
- Аудит: проверить временные метки создания в экспортированных списках ObjectId или лог-файлах
- Расследование инцидентов: определить возраст записей при миграции данных или анализе инцидентов
Принцип работы
- Инструмент берёт первые 8 шестнадцатеричных символов ObjectId.
- Разбирает их как 32-битное целое число в формате big-endian для получения Unix-временной метки в секундах.
- Умножает на 1000 и передаёт в объект JavaScript
Date. - Форматирует полученную дату в ISO 8601, UTC-строку, строку с учётом локали и необработанные секунды.
Ограничения
- Извлекается только временная метка создания. Случайная часть и счётчик ObjectId не декодируются, поскольку не несут значимых для пользователя данных.
- ObjectId, сгенерированные с пользовательской или нулевой временной меткой, вернут корректную, но потенциально вводящую в заблуждение дату.
- Формат локальной даты зависит от настроек локали вашего браузера.
Часто задаваемые вопросы
Можно ли извлечь дату из любого MongoDB ObjectId?
Да. Каждый стандартный MongoDB ObjectId — независимо от того, был ли он сгенерирован драйвером MongoDB, Mongoose, mongosh или такими инструментами, как Faker.js, — содержит корректную временную метку в первых четырёх байтах.
Это то же самое, что поле createdAt?
Только если ObjectId был сгенерирован в момент вставки (поведение по умолчанию). Если ObjectId был задан вручную, встроенная временная метка может отличаться от фактического времени создания.
Работает ли это с ObjectId из старых версий MongoDB? Да. 4-байтовый префикс временной метки является частью спецификации ObjectId с момента первого выпуска MongoDB. Единственное изменение со временем коснулось средних байтов (идентификатор машины вместо случайного значения), которые этот инструмент не декодирует.