From: Yann Pringault Date: Sat, 4 Nov 2017 14:37:49 +0000 (+0100) Subject: Fix year setter for random days in leap year (#4255) X-Git-Tag: 2.19.2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6beb383a0ab0d4c8b3bb56d1393d810db79d486e;p=thirdparty%2Fmoment.git Fix year setter for random days in leap year (#4255) --- diff --git a/src/lib/moment/get-set.js b/src/lib/moment/get-set.js index ce5ac823d..f5035f1a4 100644 --- a/src/lib/moment/get-set.js +++ b/src/lib/moment/get-set.js @@ -24,7 +24,7 @@ export function get (mom, unit) { export function set (mom, unit, value) { if (mom.isValid() && !isNaN(value)) { - if (unit === 'FullYear' && isLeapYear(mom.year())) { + if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) { mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month())); } else { diff --git a/src/test/moment/getters_setters.js b/src/test/moment/getters_setters.js index 280ee6ea0..2c47a8913 100644 --- a/src/test/moment/getters_setters.js +++ b/src/test/moment/getters_setters.js @@ -277,6 +277,10 @@ test('year setter', function (assert) { var b = moment([2012, 1, 29]); assert.equal(moment(b).year(2017).format('YYYY-MM-DD'), '2017-02-28', 'set from last day of february on a leap year to a non leap year'); assert.equal(moment(b).year(2004).format('YYYY-MM-DD'), '2004-02-29', 'set from last day of february on a leap year to a leap year'); + + var c = moment([2012, 9, 4]); + assert.equal(moment(c).year(2017).format('YYYY-MM-DD'), '2017-10-04', 'set from a random day on a leap year to a non leap year'); + assert.equal(moment(c).year(2004).format('YYYY-MM-DD'), '2004-10-04', 'set from a random day on a leap year to a leap year'); }); test('object set ordering', function (assert) {