Date.getTimezoneOffset() в JavaScript — зсув часового поясу


Загальний опис

Date.prototype.getTimezoneOffset() — це метод у JavaScript, призначений для отримання зміщення часової зони в хвилинах між місцевим часом та Універсальним координованим часом (UTC). Цей метод відіграє ключову роль у розробці веб-застосунків, де правильне відображення часу відповідно до місцевого часу користувача є критично важливим.

Метод Date.prototype.getTimezoneOffset() не приймає жодних аргументів і повертає зміщення часу у хвилинах. Він корисний, коли треба конвертувати місцевий час у UTC або навпаки, а також для визначення місцевого часу користувача. Основні сфери застосування включають, але не обмежуються, обробкою часу і дати у туристичних сервісах, геолокаційних службах та в інших сценаріях, де важливий контекст часової зони.

Подивимося на практичний приклад:

let date = new Date();
let offset = date.getTimezoneOffset();
console.log(offset);

У випадку, коли ви запустите цей код в Україні (яка, до речі, має UTC+2 години), результатом буде "-120". Це означає, що поточна часова зона на 120 хвилин випереджає UTC.

Важливо зазначити, що getTimezoneOffset() є частиною прототипу Date, а отже, доступний для всіх екземплярів об'єкта Date. Крім того, цей метод часто використовується в поєднанні з іншими методами Date, щоб забезпечити повну адаптацію часу до потреб користувача.

Наприклад, якщо ви хочете конвертувати часову мітку UTC в локальний час:

let utcDate = new Date(Date.UTC(2023, 0, 1)); // 1 січня 2023 року в UTC
let offset = utcDate.getTimezoneOffset();
let localDate = new Date(utcDate.setMinutes(utcDate.getMinutes() - offset));
console.log(localDate);

Цей код конвертує часову мітку UTC в місцевий час, враховуючи часовий зсув.

автор: Bond

Порада

Якщо ви використовуєте getTimezoneOffset() з метою врахування літнього часу, будьте обережні. Деякі країни можуть змінювати свої правила щодо літнього часу, тому завжди перевіряйте актуальність інформації.

автор: Bond
Порада

Якщо вам легше сприймати часовий зсув у годинах, а не в хвилинах, просто поділіть результат getTimezoneOffset() на 60:

let offsetInHours = date.getTimezoneOffset() / 60;
автор: Bond
Нотатка

Позитивне значення результату вказує на те, що місцевий час відстає від UTC, а негативне – випереджає.

автор: Bond
Нотатка

При використанні Date.prototype.getTimezoneOffset() необхідно пам'ятати, що він повертає зсув у хвилинах, який потрібно відняти від UTC, щоб отримати місцевий час. Наприклад, якщо метод поверне "-120", це означає, що ваша часова зона випереджає UTC на 2 години.

let date = new Date();
let offset = date.getTimezoneOffset();
let localHour = date.getUTCHours() - (offset / 60);
автор: Bond

Синтаксис

getTimezoneOffset()

Повернення

integer

Повертає різницю в хвилинах між місцевим часом та часом UTC (Універсальним координованим часом). Якщо місцевий час передує UTC, результат буде негативним.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 3 12 5
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад демонструє роботу методу Date.prototype.getTimezoneOffset(). Коли користувач натискає на кнопку "Отримати часовий зсув", відображається часова зона користувача відносно UTC у годинах.

HTML

<header>
  <h2 class="title">Date.prototype.getTimezoneOffset()</h2>
  <p class="description">Повертає різницю в хвилинах між місцевим часом та UTC.</p>
</header>
<main>
  <div class="result">
    <button onclick="showOffset()">Отримати часовий зсув</button>
    <div id="offsetResult">Часовий зсув: не визначено</div>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

JS

function showOffset() {
  let currentDate = new Date();
  let offset = currentDate.getTimezoneOffset();
  let offsetInHours = offset / 60;

  let resultText = offsetInHours < 0 ? `UTC+${Math.abs(offsetInHours)}` : `UTC-${offsetInHours}`;
  document.getElementById("offsetResult").innerText = "Часовий зсув: " + resultText;
}
//# sourceURL=pen.js
автор: Bond

В цьому прикладі ми створюємо новий об'єкт дати за допомогою Date(). Далі, за допомогою методу getTimezoneOffset(), отримуємо місцевий часовий зсув від UTC у хвилинах. Потім переводимо цей зсув у години. Наостанок, виводимо результат у форматі UTC, враховуючи додатковий або від'ємний зсув відносно UTC.

// Створюємо новий об'єкт дати
let currentDate = new Date();

// Отримуємо часовий зсув у хвилинах
let offset = currentDate.getTimezoneOffset();

// Переводимо зсув у години
let offsetInHours = offset / 60;

// Виводимо місцеву часову зону у форматі UTC
if (offsetInHours < 0) {
    console.log(`UTC+{Math.abs(offsetInHours)}`);
} else {
    console.log(`UTC-{offsetInHours}`);
}
автор: Bond

У цьому прикладі ми визначаємо час у форматі UTC. Далі за допомогою методу getTimezoneOffset() отримуємо часовий зсув від UTC у хвилинах. Переводячи цей зсув у години, ми можемо додати його до нашого UTC часу, щоб отримати місцевий час. На завершення ми виводимо отриманий місцевий час.

// Задаємо час у форматі UTC
let utcHour = 14; // 14:00 у форматі UTC

// Отримуємо часовий зсув у хвилинах за допомогою методу getTimezoneOffset
let offset = new Date().getTimezoneOffset();

// Переводимо зсув у години та додаємо до UTC часу
let localHour = utcHour - (offset / 60);

// Виводимо місцевий час
console.log(`Місцевий час: {localHour}:00`);
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід