Summary
In lib/DateTimeUtils.ts, UTCDateTimeToString(dateString, timeString) parses a DDMMYY date string and passes the month directly to Date.prototype.setUTCMonth. JavaScript months are 0-indexed (January = 0, December = 11), but ACARS date strings use the conventional 1-12 numbering, so every decoded date is shifted forward by one month.
Affected code
lib/DateTimeUtils.ts:11-15
public static UTCDateTimeToString(dateString: string, timeString: string) {
let utcDate = new Date();
utcDate.setUTCDate(+dateString.substr(0, 2));
utcDate.setUTCMonth(+dateString.substr(2, 2)); // <-- 1-12 passed where 0-11 expected
if (dateString.length === 6) {
utcDate.setUTCFullYear(2000 + +dateString.substr(4, 2));
}
...
}
Reproduction
DateTimeUtils.UTCDateTimeToString('150226', '1230');
// Returns "..., 15 Mar 2026 12:30:00 GMT" <-- should be 15 Feb 2026
Suggested fix
utcDate.setUTCMonth(+dateString.substr(2, 2) - 1);
Order of setUTCDate / setUTCMonth / setUTCFullYear is also fragile when the current real-world date is e.g. the 31st (setting month to a 30-day month rolls the day forward). Constructing the date in one shot via Date.UTC(year, month-1, day, ...) would be safer.
Likely related decoders affected: any plugin that calls UTCDateTimeToString for OOOI (OUT/OFF/ON/IN) or POSRPT messages.
Summary
In
lib/DateTimeUtils.ts,UTCDateTimeToString(dateString, timeString)parses aDDMMYYdate string and passes the month directly toDate.prototype.setUTCMonth. JavaScript months are 0-indexed (January = 0, December = 11), but ACARS date strings use the conventional 1-12 numbering, so every decoded date is shifted forward by one month.Affected code
lib/DateTimeUtils.ts:11-15Reproduction
Suggested fix
Order of
setUTCDate/setUTCMonth/setUTCFullYearis also fragile when the current real-world date is e.g. the 31st (setting month to a 30-day month rolls the day forward). Constructing the date in one shot viaDate.UTC(year, month-1, day, ...)would be safer.Likely related decoders affected: any plugin that calls
UTCDateTimeToStringfor OOOI (OUT/OFF/ON/IN) or POSRPT messages.