Я перехожу с Moment.js на date-fns и столкнулся с проблемой при конвертации функции UTC смещения. У меня есть старый код на Moment.js, который работает правильно, но я не могу найти аналогичную функциональность в date-fns или нативном JavaScript.
Исходный код на Moment.js:
var startDate = new Date('2019-09-09T05:00:00Z');
var finalResult = this.moment(startDate).utcOffset(-5).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).utc().format();
Результат: 2019-09-09T05:00:00Z
Мой код для конвертации:
function convertOffsetToUTC() {
var startDate = new Date('2019-09-09T05:00:00Z');
var processedTime = new Date(startDate);
var offsetFromDB = -5; // значение временной зоны из базы данных
var timeDifference = offsetFromDB * 60 - processedTime.getTimezoneOffset();
var adjustedTime = new Date(processedTime.getTime() + timeDifference * 60 * 1000);
adjustedTime.setHours(0, 0, 0, 0);
return convertToUTCFormat(makeUTCDate(adjustedTime));
}
function convertToUTCFormat(dateObj) {
return format(dateObj, 'yyyy-MM-dd') + 'T' + format(dateObj, 'HH:mm:ss') + 'Z';
}
function makeUTCDate(inputDate) {
var localOffset = inputDate.getTimezoneOffset();
return Math.sign(localOffset) !== -1 ? addMinutes(inputDate, localOffset) : subMinutes(inputDate, Math.abs(localOffset));
}
Но результат получается 2019-09-08T18:30:00Z, что не соответствует ожидаемому.
Возможно, я неправильно применяю смещение к дате. Буду благодарен за помощь и предложения по решению этой проблемы.