diff --git a/src/components/datetime/datetime.ts b/src/components/datetime/datetime.ts index abf9dd3c37..0aaf570fac 100644 --- a/src/components/datetime/datetime.ts +++ b/src/components/datetime/datetime.ts @@ -594,9 +594,15 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces let monthOpt: PickerColumnOption; let dayOpt: PickerColumnOption; - // default to assuming today's year - let selectedYear = today.getFullYear(); + // default to the current year + let selectedYear: number = today.getFullYear(); + if (yearCol) { + // default to the first value if the current year doesn't exist in the options + if (!yearCol.options.find(col => col.value === today.getFullYear())) { + selectedYear = yearCol.options[0].value; + } + yearOpt = yearCol.options[yearCol.selectedIndex]; if (yearOpt) { // they have a selected year value @@ -639,7 +645,7 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces if (isPresent(selectedMonth)) { // enable/disable which days are valid // to show within the min/max date range - for (i = 0; i < 31; i++) { + for (i = 0; i < dayCol.options.length; i++) { dayOpt = dayCol.options[i]; // loop through each day and see if it @@ -653,7 +659,7 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces } else { // enable/disable which numbers of days to show in this month - for (i = 0; i < 31; i++) { + for (i = 0; i < dayCol.options.length; i++) { dayCol.options[i].disabled = (numDaysInMonth <= i); } } diff --git a/src/components/datetime/test/basic/app-module.ts b/src/components/datetime/test/basic/app-module.ts index ed294d8c2a..b0717a43b9 100644 --- a/src/components/datetime/test/basic/app-module.ts +++ b/src/components/datetime/test/basic/app-module.ts @@ -8,6 +8,7 @@ import { IonicApp, IonicModule } from '../../../..'; }) export class E2EPage { myDate: any; + monthOnly = '2012-12-15T13:47:20.789'; wwwInvented = '1989'; time = '13:47:00'; netscapeReleased = '1994-12-15T13:47:20.789'; diff --git a/src/components/datetime/test/basic/main.html b/src/components/datetime/test/basic/main.html index dc0b28fc62..8654bc5b44 100644 --- a/src/components/datetime/test/basic/main.html +++ b/src/components/datetime/test/basic/main.html @@ -9,6 +9,11 @@ + + MMMM + + + YYYY @@ -62,7 +67,13 @@ + + Specific days/months/years + + +

diff --git a/src/components/datetime/test/datetime.spec.ts b/src/components/datetime/test/datetime.spec.ts index 13894b4621..f3120b26eb 100644 --- a/src/components/datetime/test/datetime.spec.ts +++ b/src/components/datetime/test/datetime.spec.ts @@ -105,6 +105,34 @@ describe('DateTime', () => { expect(columns[1].options[30].disabled).toEqual(true); }); + it('should enable all of the values given', () => { + datetime.monthValues = '6,7,8'; + datetime.dayValues = '01,02,03,04,05,06,08,09,10, 11, 12, 13, 14'; + datetime.yearValues = '2014,2015'; + + datetime.pickerFormat = 'MM DD YYYY'; + + var picker = new Picker(mockApp()); + datetime.generate(picker); + + var columns = picker.getColumns(); + + expect(columns[0].options.length).toEqual(3); // months + expect(columns[1].options.length).toEqual(13); // days + expect(columns[2].options.length).toEqual(2); // years + + datetime.validate(picker); + + // Months + for (var i = 0; i < columns[0].options.length; i++) { + expect(columns[0].options[i].disabled).toEqual(false); + } + + // // Days + for (var i = 0; i < columns[1].options.length; i++) { + expect(columns[1].options[i].disabled).toEqual(false); + } + }); }); describe('writeValue', () => {