Время эпохи, также известное как время Unix или время POSIX, представляет собой систему представления временных меток в виде одного целочисленного значения, подсчитывающего количество секунд, прошедших с момента определенной контрольной точки, называемой «эпохой». Эта контрольная точка обычно определяется как 00:00:00 всемирного координированного времени (UTC) 1 января 1970 года.

Время эпохи обычно используется в различных приложениях для отметки времени, измерения временных интервалов и выполнения вычислений, связанных со временем.

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

Как извлечь текущую эпоху или время UNIX?

В JavaScript вы можете получить время текущей эпохи (также известное как временная метка Unix), используя объект Date. Вот пример того, как получить время текущей эпохи с помощью JavaScript:

// Get the current epoch time in milliseconds
const currentEpochTime = Date.now();

console.log(currentEpochTime);

// Output
1692274374768 // It will be different when you run it

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

// Get the current epoch time in seconds
const currentEpochTimeInSeconds = Math.floor(Date.now() / 1000);

console.log(currentEpochTimeInSeconds);

// Output
1692274418 // It will be different when you run it

API обычно передают время эпохи в секундах, поэтому вам необходимо сначала преобразовать время секунды эпохи в миллисекунды.

Теперь мы извлечем местную дату и время (где вы живете или где установлено ваше системное время) из временной метки Epoch или UNIX:

// Get the current epoch time in milliseconds
const currentEpochTime = Date.now();

// Create a Date object from the local date and time in milliseconds
var localDate = new Date(currentLocalDateMillis);

// Format the local date and time as a string (using the local time zone)
var localDateTimeString = localDate.toLocaleString(); // Using default options

console.log("Local Date and Time:", localDateTimeString);

// Output

8/17/2023, 8:52:55 PM

В приведенном выше фрагменте кода мы извлекли дату и время, но если мы хотим извлечь только дату или время, мы можем использовать следующие Date методы:

  • getFullYear() Получить год в виде четырехзначного числа (гггг)
  • getMonth() Получить месяц в виде числа (0–11)
  • getDate() Получить день в виде числа (1–31).
  • getDay() Получить день недели в виде числа (0–6).
  • getHours() Получить час (0–23)
  • getMinutes() Получить минуту (0-59)
  • getSeconds() Получить второе место (0-59)
  • getMilliseconds() Получить миллисекунду (0–999)
  • getTime() Получить время (миллисекунды с 1 января 1970 г.)

Теперь мы будем использовать вышеуказанный метод для извлечения текущего времени из эпохи эпохи или времени UNIX:

function convertEpochToLocalTime(epochTimestamp) {
  const date = new Date(epochTimestamp * 1000); // Multiply by 1000 to convert seconds to milliseconds
  
  const hours = date.getHours();
  const minutes = date.getMinutes();
  const seconds = date.getSeconds();
  
  let formattedHours = hours % 12;
  if (formattedHours === 0) {
    formattedHours = 12; // 12:00 AM or 12:00 PM
  }
  
  const amOrPm = hours < 12 ? 'AM' : 'PM';
  
  const formattedTime = `${formattedHours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')} ${amOrPm}`;
  
  return formattedTime;
}

const epochTimestamp = 1661870592;
const formattedTime = convertEpochToLocalTime(epochTimestamp);

console.log(formattedTime);

Извлечение времени UTC из времени Epoch или UNIX

Чтобы преобразовать временную метку эпохи во время UTC в JavaScript, вы можете использовать объект Date. Вот как вы можете это сделать:

const epochTimestamp = 1628899200; // Replace this with your epoch timestamp

// Convert epoch timestamp to UTC date and time
const utcDate = new Date(epochTimestamp * 1000);

console.log("UTC Time:", utcDate.toUTCString());

В этом примере 1628899200 — это временная метка эпохи, представляющая определенный момент времени. Объект Date в JavaScript работает с миллисекундами, поэтому вам необходимо умножить временную метку эпохи на 1000, чтобы преобразовать ее из секунд в миллисекунды, прежде чем создавать объект Date.

Метод toUTCString() объекта Date используется для получения строкового представления даты и времени в формате UTC.

Теперь, если мы хотим извлечь дату или время, мы можем использовать следующие Dateметоды:

  • getUTCDate() Возвращает дату в формате UTC.
  • getUTCFullYear() Возвращает год по всемирному координированному времени.
  • getUTCMonth() Возвращает месяц по всемирному координированному времени.
  • getUTCDay() Возвращает день по всемирному координированному времени.
  • getUTCHours() Возвращает часы UTC.
  • getUTCMinutes() Возвращает минуты по всемирному координированному времени.
  • getUTCSeconds() Возвращает секунды в формате UTC.
  • getUTCMilliseconds() Возвращает миллисекунды в формате UTC.

Теперь мы будем использовать вышеуказанный метод для извлечения текущего времени из эпохи эпохи или времени UNIX:

const epochTimestamp = 1628899200; // Replace this with your epoch timestamp

// Convert epoch timestamp to UTC date and time
const utcDate = new Date(epochTimestamp * 1000);

// Get individual components of the UTC date
const hours = utcDate.getUTCHours();
const minutes = utcDate.getUTCMinutes();
const seconds = utcDate.getUTCSeconds();

// Convert hours to 12-hour format
const twelveHourFormat = hours % 12 || 12;
const ampm = hours < 12 ? "AM" : "PM";

// Construct the formatted time string
const formattedTime = `${twelveHourFormat}:${minutes}:${seconds} ${ampm}`;

console.log("UTC Time (12-hour format):", formattedTime);

Заключение

Время эпохи служит числовым представлением времени путем подсчета секунд (или миллисекунд), прошедших с заранее определенной начальной точки, известной как эпоха Unix, часто устанавливаемой на 1 января 1970 года. Оно предлагает стандартизированный подход для компьютеров к управлению временем, облегчая сравнения и расчеты в различных системах и местах.

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

https://www.unixtutorial.org/unix-epoch/

https://www.w3schools.com/js/js_date_methods.asp