我正在从 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。
我想,我在我的日期中添加偏移量是滞后的。欢迎提出建议。谢谢