diff --git a/src/plugin/localeData/index.js b/src/plugin/localeData/index.js new file mode 100644 index 000000000..b85a838a4 --- /dev/null +++ b/src/plugin/localeData/index.js @@ -0,0 +1,16 @@ +export default (o, c) => { // locale needed later + const proto = c.prototype + const localeData = function () { + return { + months: instance => instance.format('MMMM'), + monthsShort: instance => instance.format('MMM'), + firstDayOfWeek: () => this.$locale().weekStart || 0, + weekdaysMin: instance => instance.format('dd'), + weekdaysShort: instance => instance.format('ddd') + } + } + proto.localeData = function () { + return localeData.bind(this)() + } +} + diff --git a/test/plugin/localeData.test.js b/test/plugin/localeData.test.js new file mode 100644 index 000000000..5e5e1cb95 --- /dev/null +++ b/test/plugin/localeData.test.js @@ -0,0 +1,26 @@ +import MockDate from 'mockdate' +import moment from 'moment' +import dayjs from '../../src' +import localeData from '../../src/plugin/localeData' + +dayjs.extend(localeData) + +beforeEach(() => { + MockDate.set(new Date()) +}) + +afterEach(() => { + MockDate.reset() +}) + +it('localeData', () => { + const d = dayjs() + const m = moment() + const dayjsLocaleData = dayjs().localeData() + const momentLocaleData = moment().localeData() + expect(dayjsLocaleData.firstDayOfWeek()).toBe(momentLocaleData.firstDayOfWeek()) + expect(dayjsLocaleData.months(d)).toBe(momentLocaleData.months(m)) + expect(dayjsLocaleData.monthsShort(d)).toBe(momentLocaleData.monthsShort(m)) + expect(dayjsLocaleData.weekdaysMin(d)).toBe(momentLocaleData.weekdaysMin(m)) + expect(dayjsLocaleData.weekdaysShort(d)).toBe(momentLocaleData.weekdaysShort(m)) +}) diff --git a/types/plugin/localeData.d.ts b/types/plugin/localeData.d.ts new file mode 100644 index 000000000..7d9817637 --- /dev/null +++ b/types/plugin/localeData.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + localeData(): any + } +}