dateStr = dateParserFormatter.format(dateStruct)
expect(dateStr).toEqual('04.05.2023')
})
+
+ it('should handle years when current year % 100 < 50', () => {
+ jest.useFakeTimers()
+ jest.setSystemTime(new Date(2026, 5, 15))
+ let val = dateParserFormatter.parse('5/4/26')
+ expect(val).toEqual({ day: 4, month: 5, year: 2026 })
+
+ val = dateParserFormatter.parse('5/4/75')
+ expect(val).toEqual({ day: 4, month: 5, year: 2075 })
+
+ val = dateParserFormatter.parse('5/4/99')
+ expect(val).toEqual({ day: 4, month: 5, year: 1999 })
+ jest.useRealTimers()
+ })
+
+ it('should handle years when current year % 100 >= 50', () => {
+ jest.useFakeTimers()
+ jest.setSystemTime(new Date(2076, 5, 15))
+ const val = dateParserFormatter.parse('5/4/00')
+ expect(val).toEqual({ day: 4, month: 5, year: 2100 })
+ jest.useRealTimers()
+ })
})
value = this.preformatDateInput(value)
let match = this.getDateParseRegex().exec(value)
if (match) {
+ const currentYear = new Date().getFullYear()
+ const currentCentury = currentYear - (currentYear % 100)
+
+ let year = +match.groups.year
+ if (year < 100) {
+ let fourDigitYear = currentCentury + year
+ // Mimic python-dateutil: keep result within -50/+49 years of current year
+ if (fourDigitYear > currentYear + 49) {
+ fourDigitYear -= 100
+ } else if (fourDigitYear <= currentYear - 50) {
+ fourDigitYear += 100
+ }
+ year = fourDigitYear
+ }
+
let dateStruct = {
day: +match.groups.day,
month: +match.groups.month,
- year: +match.groups.year,
- }
- if (dateStruct.year <= new Date().getFullYear() - 2000) {
- dateStruct.year += 2000
- } else if (dateStruct.year < 100) {
- dateStruct.year += 1900
+ year,
}
return dateStruct
} else {