From a7aaec3cc223ef4fd3936f8c9c7cc99708c1e179 Mon Sep 17 00:00:00 2001 From: George Drummond Date: Mon, 28 Jan 2019 09:42:15 -0500 Subject: [PATCH] Take leap years into account --- js/components/__tests__/date_selector.test.js | 15 +++++++++++++++ js/components/date_selector.js | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/js/components/__tests__/date_selector.test.js b/js/components/__tests__/date_selector.test.js index 660292c8..61bb9dfe 100644 --- a/js/components/__tests__/date_selector.test.js +++ b/js/components/__tests__/date_selector.test.js @@ -32,6 +32,8 @@ describe('DateSelector', () => { describe('daysMaxCalculation', () => { it('calculates correctly for each month', () => { + component.year = null + let months = { '1': 31, '2': 29, @@ -52,6 +54,19 @@ describe('DateSelector', () => { expect(component.daysMaxCalculation).toEqual(months[month]) } }) + + it('takes year or lack of year into account and calculates leap years', () => { + component.month = 2 + + component.year = null + expect(component.daysMaxCalculation).toEqual(29) + + component.year = 2019 + expect(component.daysMaxCalculation).toEqual(28) + + component.year = 2016 + expect(component.daysMaxCalculation).toEqual(29) + }) }) describe('isMonthValid', () => { diff --git a/js/components/date_selector.js b/js/components/date_selector.js index 3093ce42..8103ad23 100644 --- a/js/components/date_selector.js +++ b/js/components/date_selector.js @@ -1,4 +1,5 @@ import Vue from 'vue' +import { getDaysInMonth } from 'date-fns' var paddedNumber = function(number) { if ((number + '').length === 1) { @@ -78,7 +79,11 @@ export default Vue.component('date-selector', { daysMaxCalculation: function() { switch (parseInt(this.month)) { case 2: // February - return 29 + if (this.year) { + return getDaysInMonth(new Date(this.year, this.month - 1)) + } else { + return 29 + } break case 4: // April