Skip to content

Commit

Permalink
[Issue-205] Add date fix for short month and leap year
Browse files Browse the repository at this point in the history
  • Loading branch information
nosir committed Jul 30, 2017
1 parent af459f4 commit 1f9ec22
Show file tree
Hide file tree
Showing 10 changed files with 357 additions and 12 deletions.
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"form",
"input"
],
"version": "0.9.0",
"version": "0.9.1",
"author": {
"name": "Max Huang",
"email": "[email protected]",
Expand Down
77 changes: 76 additions & 1 deletion dist/cleave-angular.js
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,82 @@ return /******/ (function(modules) { // webpackBootstrap
}
});

return result;
return this.getFixedDateString(result);
},

getFixedDateString: function (value) {
var owner = this, datePattern = owner.datePattern, date = [],
dayIndex = 0, monthIndex = 0, yearIndex = 0,
dayStartIndex = 0, monthStartIndex = 0, yearStartIndex = 0,
day, month, year;

// mm-dd || dd-mm
if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {
dayStartIndex = datePattern[0] === 'd' ? 0 : 2;
monthStartIndex = 2 - dayStartIndex;
day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);

date = this.getFixedDate(day, month, 0);
}

// yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd
if (value.length === 8) {
datePattern.forEach(function (type, index) {
switch (type) {
case 'd':
dayIndex = index;
break;
case 'm':
monthIndex = index;
break;
default:
yearIndex = index;
break;
}
});

yearStartIndex = yearIndex * 2;
dayStartIndex = (dayIndex <= yearIndex) ? dayIndex * 2 : (dayIndex * 2 + 2);
monthStartIndex = (monthIndex <= yearIndex) ? monthIndex * 2 : (monthIndex * 2 + 2);

day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);

date = this.getFixedDate(day, month, year);
}

return date.length === 0 ? value : datePattern.reduce(function (previous, current) {
switch (current) {
case 'd':
return previous + owner.addLeadingZero(date[0]);
case 'm':
return previous + owner.addLeadingZero(date[1]);
default:
return previous + '' + (date[2] || '');
}
}, '');
},

getFixedDate: function (day, month, year) {
day = Math.min(day, 31);
month = Math.min(month, 12);
year = parseInt((year || 0), 10);

if ((month < 7 && month % 2 === 0) || (month > 8 && month % 2 === 1)) {
day = Math.min(day, month === 2 ? (this.isLeapYear(year) ? 29 : 28) : 30);
}

return [day, month, year];
},

isLeapYear: function (year) {
return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
},

addLeadingZero: function (number) {
return (number < 10 ? '0' : '') + number;
}
};

Expand Down
4 changes: 2 additions & 2 deletions dist/cleave-angular.min.js

Large diffs are not rendered by default.

85 changes: 84 additions & 1 deletion dist/cleave-react.js
Original file line number Diff line number Diff line change
Expand Up @@ -1774,7 +1774,90 @@ return /******/ (function(modules) { // webpackBootstrap
}
});

return result;
return this.getFixedDateString(result);
},

getFixedDateString: function getFixedDateString(value) {
var owner = this,
datePattern = owner.datePattern,
date = [],
dayIndex = 0,
monthIndex = 0,
yearIndex = 0,
dayStartIndex = 0,
monthStartIndex = 0,
yearStartIndex = 0,
day,
month,
year;

// mm-dd || dd-mm
if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {
dayStartIndex = datePattern[0] === 'd' ? 0 : 2;
monthStartIndex = 2 - dayStartIndex;
day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);

date = this.getFixedDate(day, month, 0);
}

// yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd
if (value.length === 8) {
datePattern.forEach(function (type, index) {
switch (type) {
case 'd':
dayIndex = index;
break;
case 'm':
monthIndex = index;
break;
default:
yearIndex = index;
break;
}
});

yearStartIndex = yearIndex * 2;
dayStartIndex = dayIndex <= yearIndex ? dayIndex * 2 : dayIndex * 2 + 2;
monthStartIndex = monthIndex <= yearIndex ? monthIndex * 2 : monthIndex * 2 + 2;

day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);

date = this.getFixedDate(day, month, year);
}

return date.length === 0 ? value : datePattern.reduce(function (previous, current) {
switch (current) {
case 'd':
return previous + owner.addLeadingZero(date[0]);
case 'm':
return previous + owner.addLeadingZero(date[1]);
default:
return previous + '' + (date[2] || '');
}
}, '');
},

getFixedDate: function getFixedDate(day, month, year) {
day = Math.min(day, 31);
month = Math.min(month, 12);
year = parseInt(year || 0, 10);

if (month < 7 && month % 2 === 0 || month > 8 && month % 2 === 1) {
day = Math.min(day, month === 2 ? this.isLeapYear(year) ? 29 : 28 : 30);
}

return [day, month, year];
},

isLeapYear: function isLeapYear(year) {
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
},

addLeadingZero: function addLeadingZero(number) {
return (number < 10 ? '0' : '') + number;
}
};

Expand Down
4 changes: 2 additions & 2 deletions dist/cleave-react.min.js

Large diffs are not rendered by default.

77 changes: 76 additions & 1 deletion dist/cleave.js
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,82 @@ return /******/ (function(modules) { // webpackBootstrap
}
});

return result;
return this.getFixedDateString(result);
},

getFixedDateString: function (value) {
var owner = this, datePattern = owner.datePattern, date = [],
dayIndex = 0, monthIndex = 0, yearIndex = 0,
dayStartIndex = 0, monthStartIndex = 0, yearStartIndex = 0,
day, month, year;

// mm-dd || dd-mm
if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {
dayStartIndex = datePattern[0] === 'd' ? 0 : 2;
monthStartIndex = 2 - dayStartIndex;
day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);

date = this.getFixedDate(day, month, 0);
}

// yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd
if (value.length === 8) {
datePattern.forEach(function (type, index) {
switch (type) {
case 'd':
dayIndex = index;
break;
case 'm':
monthIndex = index;
break;
default:
yearIndex = index;
break;
}
});

yearStartIndex = yearIndex * 2;
dayStartIndex = (dayIndex <= yearIndex) ? dayIndex * 2 : (dayIndex * 2 + 2);
monthStartIndex = (monthIndex <= yearIndex) ? monthIndex * 2 : (monthIndex * 2 + 2);

day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);
month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);
year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);

date = this.getFixedDate(day, month, year);
}

return date.length === 0 ? value : datePattern.reduce(function (previous, current) {
switch (current) {
case 'd':
return previous + owner.addLeadingZero(date[0]);
case 'm':
return previous + owner.addLeadingZero(date[1]);
default:
return previous + '' + (date[2] || '');
}
}, '');
},

getFixedDate: function (day, month, year) {
day = Math.min(day, 31);
month = Math.min(month, 12);
year = parseInt((year || 0), 10);

if ((month < 7 && month % 2 === 0) || (month > 8 && month % 2 === 1)) {
day = Math.min(day, month === 2 ? (this.isLeapYear(year) ? 29 : 28) : 30);
}

return [day, month, year];
},

isLeapYear: function (year) {
return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
},

addLeadingZero: function (number) {
return (number < 10 ? '0' : '') + number;
}
};

Expand Down
Loading

0 comments on commit 1f9ec22

Please sign in to comment.