Русский

Инструменты разработчика · Конвертер временных меток Unix

Как браузер преобразует эпоху в местное время с помощью Date и Intl

· Как это работает

временные метки javascript API-интерфейс браузера

Одна эпоха входит в браузер и появляется как UTC и показания местных часов.
Оригинальная векторная иллюстрация ToolAcre

Конвертер браузера не имеет собственных часов сервера или базы данных часовых поясов; он опирается на объект Date и Intl API, поддерживаемый вашей операционной системой. В этом посте объясняется этот конвейер и его ограничения.

Откуда браузер получает «локальный»? — одна и та же эпоха по-разному отображается на ноутбуке и телефоне в одной комнате.

Два устройства рядом друг с другом могут отображать одну эпоху по-разному, если их настроенные локальные зоны различаются. Целое число не меняется между ноутбуком и телефоном; каждый браузер создает одно и то же мгновение, а затем предоставляет поля локального календаря для своей среды. Таким образом, «местный» описывает читателя, а не свойство, перенесенное внутрь эпохи.

ToolAcre делает эту зависимость видимой, помечая локальную строку `Intl.DateTimeFormat().resolvedOptions().timeZone`. Снимок экрана, на котором указано одно время, и журнал сервера, на котором указано другое, могут быть точными показаниями. Сначала сравните их строки UTC; соответствие вывода UTC показывает, что отличается представление, а не основной момент.

Дата занимает миллисекунды — контракт конструктора, почему секунды необходимо умножать на тысячу и диапазон Date может представлять

JavaScript `Date` получает миллисекунды от эпохи. `fromEpoch` ToolAcre умножает введенные секунды на 1,000 и оставляет введенные миллисекунды неизменными перед созданием объекта. Это преобразование является явным, поскольку передача 1,717,243,200 непосредственно в `new Date` будет означать примерно двадцать дней после 1970, а не июня 2024.

Реализация отклоняет неопределенное число и любое интерпретируемое значение за пределами ±8.64×10¹⁵ миллисекунд перед форматированием. Это ограничение исходит из диапазона дат, указанного в источнике, а не из базы данных или часов операционной системы. Изменение селектора может привести к перемещению значения за границу, поэтому ошибка также сообщит вам, какая единица измерения была применена.

UTC средства доступа и локальные средства доступа — getUTCHours и getHours, и как движок применяет смещение

ToolAcre не извлекает поля с `getUTCHours` и `getHours`; Формулировка доступа в схеме более конкретна, чем реализация. Он просит `Intl.DateTimeFormat` отформатировать дату один раз с помощью `timeZone: "UTC"` и один раз без переопределения зоны. Оба вызова получают одно и то же значение миллисекунды, поэтому ни один из них не может переместить само событие.

Это различие имеет значение при отладке. Если строки секунд и миллисекунд соответствуют производителю, но местная метка вас удивляет, проверьте зону браузера, а не добавляйте часы к эпохе. Ручная арифметика смещения создаст другой момент, а затем позволит форматтеру снова применить локальные правила, создавая классическую ошибку двойной корректировки.

UTC и локальное форматирование запрашивают у движка два чтения одной даты

Конвертер может доказать, что он запрашивает у браузера `resolvedOptions().timeZone`; он не может доказать, получил ли конкретный механизм каждое правило часового пояса из операционной системы, связанных данных или другого уровня платформы. Источник намеренно рассматривает это оборудование как ответственность движка и возвращается к фразе «местное время», если запрос зоны не удался.

Эта граница доказательств полезна. Именованная зона в результате идентифицирует текущий выбор браузера, но не является отчетом о версии базы данных часовых поясов. Если две среды не согласны со старой датой, запишите браузер, операционную систему и отображаемую зону. Преобразователь обеспечивает наблюдение; он не диагностирует пакет данных за Intl.

Браузер сообщает о локальной зоне, а источник его правил остается деталью реализации.

Для строки ISO `toISOString()` предоставляет строку UTC с завершающей буквой Z и тремя дробными цифрами. Удобочитаемые человеком строки UTC и локальные строки используют форматировщик английского языка Великобритании с числовым годом, сокращенным месяцем, двузначным днем ​​и 24-часовыми часами. Средство форматирования также запрашивает `shortOffset`, создавая соответствующую часть смещения каждой отображаемой строки.

Этот выбор объясняет, почему копирование `Date.toString()` с консоли не является эквивалентным доказательством. Его точная формулировка зависит от локали и находится вне контракта вывода этого инструмента. ToolAcre исправляет параметры отображения, но при этом позволяет изменять фактическую локальную зону. Скопируйте значение ISO, если другой системе требуется стабильное машиночитаемое сравнение.

Рабочий пример: одна эпоха, три выхода — строка UTC ISO, локально отформатированное время и смещение в минутах от getTimezoneOffset.

Введите 1,717,243,200 и выберите секунды. Умножение дает 1,717,243,200,000 миллисекунд, которые тесты определяют как `2024-06-01T12:00:00.000Z`. Строка UTC форматируется мгновенно в UTC; локальная строка форматирует идентичную дату в зоне браузера и называет эту зону. Строки секунд и миллисекунд сохраняют обе числовые формы.

Точные локальные часы и смещение необходимо считать с устройства, на котором выполняется пример; публикация здесь будет означать, что у каждого читателя одна и та же зона. Вот почему эта сработавшая проверка использует утверждение ISO в качестве фиксированного результата и обрабатывает локальные выходные данные как наблюдаемое значение. Если ISO отличается, повторно посетите выбранный объект, прежде чем исследовать настройки местоположения.

Рабочий пример: одна эпоха, три выхода ToolAcre фактически раскрывают

Этот маршрут не предлагает селектора для произвольной третьей зоны. `formatInZone` может принимать зону внутри себя, но панель вызывает ее для UTC и только для браузера по умолчанию. Статья, утверждающая, что пользователи могут выбирать Токио, Найроби или Торонто, будет описывать интерфейс, который не поставляется, хотя Intl может поддерживать такое форматирование в других местах.

Он также не предоставляет доступ к выбору календаря, языкового стандарта или версии базы данных часовых поясов. Для преобразования между офисами сохраните эпоху в качестве привязки и используйте инструмент, в документированном интерфейсе которого указана целевая зона. Здесь ценно более узкое обещание: универсальный UTC рядом с локальной средой, без скрытого сервера, решающего, что означает локальный.

Вывод: ваш браузер — это часы и атлас, и как конвертер временных меток Unix использует его для отображения UTC и локального изображения рядом без сервера.

Браузер действует как арифметическая машина и среда представления. ToolAcre разрешает единицу измерения, создает одну дату, запрашивает каноническое значение ISO, затем форматирует UTC и локальные показания рядом. Для этих шагов не требуется служба удаленного преобразования, и отображаемый блок сохраняет решение о коэффициенте 1,000 доступным для просмотра.

Если выходные данные на разных устройствах не совпадают, сравните строку ISO, примечание к устройству и именованную локальную зону в указанном порядке. Эти три наблюдения разделяют момент, масштаб и представление. Если рассматривать местные часы как источник истины, все три вопроса сводятся в один, и правильное преобразование выглядит неверным всякий раз, когда зритель меняет зону.