#javascript #date #epoch
Вопрос:
Я использовал этот код для преобразования эпохи в дату, читаемую человеком
var timestamp = 1293683278;
var date = new Date(timestamp*1000);
var year = date.getFullYear();
var month = date.getMonth() 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
Мне нужно изменить его на UTC 3, как я могу это сделать ?
Спасибо за вашу помощь
Ответ №1:
Конструктор даты обрабатывает значения времени как UTC. Объекты даты всегда представляют только время UTC, «локальные» значения, создаваемые методами toString, используют системные настройки для определения используемого смещения, но это только для создания метки времени, она не изменяет базовую дату или ее значение времени.
Если вам нужно определенное смещение, вы можете выбрать подходящее местоположение IANA, например Африку/Найроби, которое составляет 3 круглый год, и создать метку времени с помощью toLocaleString или Intl.Формат даты и времени, например
console.log(
new Date().toLocaleString('default',{timeZone:'Africa/Nairobi', timeZoneName:'short'})
);
Ответ №2:
Просто любопытно, но не могли бы вы просто добавить 3 часа в свою метку времени, прежде чем форматировать ее с помощью существующего кода. Мне любопытно, есть ли какая-то тонкость в датах/календарях, где это не будет надежно работать.
const THREE_HOURS_IN_MS = 3*60*60*1000;
var date = new Date(timestamp*1000 THREE_HOURS_IN_MS);
// rest of your code stays unchanged
var year = date.getFullYear();
var month = date.getMonth() 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
Ответ №3:
Вы можете легко использовать это moment.js
utcOffset
для достижения этой цели:
const moment = require("moment");
const timestamp = 1619071948 * 1000;
console.log(moment(timestamp).utcOffset(180).format("YYYY-MM-DDThh:mm:ssZ"));
Предоставленное смещение в минутах