Skip to content

Commit 8d04a30

Browse files
committed
victorjonsson#624 fix in age calculation
1 parent caa14d3 commit 8d04a30

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

src/modules/date.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
age = getAge(year, month, day),
6262
allowedAgeRange = ($el.valAttr('age-range') || '0-124').split('-');
6363

64+
$el.trigger('ageCalculated', [age]);
65+
6466
if (allowedAgeRange.length !== 2 || !$.isNumeric(allowedAgeRange[0]) || !$.isNumeric(allowedAgeRange[1])) {
6567
throw new Error('Date range format invalid');
6668
}
@@ -71,14 +73,30 @@
7173
errorMessageKey: 'badDate'
7274
});
7375

74-
7576
function getAge(otherDateYear, otherDateMonth, otherDateDay) {
76-
var otherDate = new Date(),
77-
nowDate = new Date();
78-
otherDate.setYear(otherDateYear);
79-
otherDate.setMonth(otherDateMonth);
80-
otherDate.setDate(otherDateDay);
81-
return new Date(nowDate.getTime() - otherDate.getTime()).getUTCFullYear() - 1970;
77+
var birthDate = new Date(otherDateYear, otherDateMonth, otherDateDay), now = new Date(),
78+
years = now.getFullYear() - birthDate.getFullYear();
79+
birthDate.setFullYear(birthDate.getFullYear() + years);
80+
if (birthDate > now) {
81+
years--;
82+
birthDate.setFullYear(birthDate.getFullYear() - 1);
83+
}
84+
var days = Math.floor((now.getTime() - birthDate.getTime()) / (3600 * 24 * 1000)),
85+
yearsOld = years + days / (isLeapYear(now.getFullYear()) ? 366 : 365),
86+
decimals = ((yearsOld + '').split('.')[1] || '').substr(0, 3);
87+
88+
if (yearsOld >= 0) {
89+
return Math.floor(yearsOld) + (decimals >= 915 ? 1:0);
90+
} else {
91+
decimals *= 10;
92+
return Math.floor(yearsOld) + (decimals <= 840 ? 1:0);
93+
}
94+
}
95+
96+
function isLeapYear(year) {
97+
var d = new Date(year, 1, 28);
98+
d.setDate(d.getDate() + 1);
99+
return d.getMonth() === 1;
82100
}
83101

84102
})(jQuery);

src/modules/sweden.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@
4444
month = $.formUtils.parseDateInt(RegExp.$2);
4545
day = $.formUtils.parseDateInt(RegExp.$3);
4646

47-
window.ssnGender = ( parseInt((RegExp.$4).substring(2, 3)) % 2 ) === 0 ? 'female' : 'male';
47+
var ssnGender = ( parseInt((RegExp.$4).substring(2, 3)) % 2 ) === 0 ? 'female' : 'male';
48+
$input.trigger('genderDerived', [ssnGender]);
49+
50+
// todo: remove when moving to version 3.0
51+
window.ssnGender = ssnGender;
4852

4953
var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
5054
if (year % 400 === 0 || year % 4 === 0 && year % 100 !== 0) {

0 commit comments

Comments
 (0)