diff --git a/src/locale/en-ca.js b/src/locale/en-ca.js index 6517e00e7..2d73ccf3e 100644 --- a/src/locale/en-ca.js +++ b/src/locale/en-ca.js @@ -8,7 +8,11 @@ const locale = { weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - ordinal: n => n, + ordinal: (n) => { + const s = ['th', 'st', 'nd', 'rd'] + const v = n % 100 + return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]` + }, formats: { LT: 'h:mm A', LTS: 'h:mm:ss A', diff --git a/src/locale/en-ie.js b/src/locale/en-ie.js index 5116c251d..82b0de039 100644 --- a/src/locale/en-ie.js +++ b/src/locale/en-ie.js @@ -9,7 +9,11 @@ const locale = { weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - ordinal: n => n, + ordinal: (n) => { + const s = ['th', 'st', 'nd', 'rd'] + const v = n % 100 + return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]` + }, formats: { LT: 'HH:mm', LTS: 'HH:mm:ss', diff --git a/src/locale/en-il.js b/src/locale/en-il.js index d19d82008..a0b316d1a 100644 --- a/src/locale/en-il.js +++ b/src/locale/en-il.js @@ -8,7 +8,11 @@ const locale = { weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - ordinal: n => n, + ordinal: (n) => { + const s = ['th', 'st', 'nd', 'rd'] + const v = n % 100 + return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]` + }, formats: { LT: 'HH:mm', LTS: 'HH:mm:ss', diff --git a/src/locale/en-sg.js b/src/locale/en-sg.js index 36575d078..5d9d6f98e 100644 --- a/src/locale/en-sg.js +++ b/src/locale/en-sg.js @@ -9,7 +9,11 @@ const locale = { weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - ordinal: n => n, + ordinal: (n) => { + const s = ['th', 'st', 'nd', 'rd'] + const v = n % 100 + return `[${n}${(s[(v - 20) % 10] || s[v] || s[0])}]` + }, formats: { LT: 'HH:mm', LTS: 'HH:mm:ss', diff --git a/test/locale/en.test.js b/test/locale/en.test.js index c7b3de1b3..76810c5b9 100644 --- a/test/locale/en.test.js +++ b/test/locale/en.test.js @@ -1,11 +1,18 @@ +import moment from 'moment' import dayjs from '../../src' import '../../src/locale/en' import '../../src/locale/en-gb' import '../../src/locale/en-in' import '../../src/locale/en-tt' +import '../../src/locale/en-ca' +import '../../src/locale/en-ie' +import '../../src/locale/en-il' +import '../../src/locale/en-sg' import localizedFormat from '../../src/plugin/localizedFormat' +import advancedFormat from '../../src/plugin/advancedFormat' dayjs.extend(localizedFormat) +dayjs.extend(advancedFormat) const locales = [ { locale: 'en', expectedDate: '12/25/2019' }, @@ -22,3 +29,16 @@ describe('English date formats', () => { }) }) }) + +describe('English ordinal (Do) parity with moment', () => { + const ordinalLocales = ['en-ca', 'en-ie', 'en-il', 'en-sg'] + ordinalLocales.forEach((locale) => { + it(`should format the ordinal day of month like moment - ${locale}`, () => { + for (let d = 1; d <= 31; d += 1) { + const date = `2021-01-${String(d).padStart(2, '0')}` + expect(dayjs(date).locale(locale).format('Do')) + .toEqual(moment(date).locale(locale).format('Do')) + } + }) + }) +})