1

我正在从 Moment JS 迁移到 date-fns。但是我很难将我的 UTC 偏移函数转换为等效的 Date-fns 函数。

这是我在时刻 js 中的早期代码

var d = new Date('2019-09-09T05:00:00Z');
var result = this.moment(d).utcOffset(-5).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).utc().format();

结果:2019-09-09T05:00:00Z

我无法在Datefns或 Vanilla JS 中找到此功能的等效功能。我尝试了以下代码进行转换

function addOffsetUTC() {
    var d = new Date('2019-09-09T05:00:00Z');
    var targetTime = new Date(d);
    var timeZoneFromDB = -5 // time zone value from database
    // Get the timezone offset from local time in minutes
    var tzDifference = timeZoneFromDB * 60 - targetTime.getTimezoneOffset();
    // Convert the offset to milliseconds, add to targetTime, and make a new Date
    var offsetTime = new Date(targetTime.getTime() + tzDifference * 60 * 1000);
    // Set offset to 0
    offsetTime.setHours(0, 0, 0, 0);

   // Convert to UTC and then format
  return formatToUTCDateFns(toUTC(result));
} 

// Format date in UTC
formatToUTCDateFns(date: Date) {
    return format(date, 'yyyy-MM-dd') + 'T' + format(date, 'HH:mm:ss') + 'Z';
}

// Convert date to UTC
 function toUTC(date) {
    var offset = date.getTimezoneOffset();
    return Math.sign(offset) !== -1 ? addMinutes(date, offset) : subMinutes(date, Math.abs(offset));
}

结果 2019-09-08T18:30:00Z。

我想,我在我的日期中添加偏移量是滞后的。欢迎提出建议。谢谢

4

0 回答 0