patternjavascriptMinor
Age in days, months and years
Viewed 0 times
agemonthsyearsanddays
Problem
var AgeConvertor = {
Age: function (formattedDate) {
var now = new Date();
var yearNow = now.getFullYear();
var monthNow = now.getMonth() + 1;
var dayNow = now.getDate();
// Calculating in days
var ONE_DAY = 1000 * 60 * 60 * 24;
var ONE_MONTH = 1000 * 60 * 60 * 24 * 30;
var date1_ms = new Date().getTime()
var date2_ms = formattedDate.getTime()
var difference_ms = Math.abs(date1_ms - date2_ms)
var yearAge = Math.round(difference_ms/ONE_DAY);
if(yearAge 30 && yearAge < 365){
return yearAge = Math.round(difference_ms/ONE_MONTH) + 'M';
} else {
// Calculating in years
var today = new Date(yearNow,monthNow,dayNow);
if (yearNow < 100) {
yearNow=yearNow+1900;
}
yearAge = yearNow - formattedDate.getFullYear();
if (monthNow <= formattedDate.getMonth()) {
if (monthNow < formattedDate.getMonth()) {
yearAge--;
} else {
if (dayNow < formattedDate.getDay()) {
yearAge--;
}
}
}
return yearAge + 'Y';
}
}
}- How well can this code be improved?
- Is there any fault in this code?
- Does this code give desired results?
This code returns your age in days, months and years.
Solution
- You should check if
formattedDateis actually aDateobject before using it (and change the variable name, since it sounds like it contains a formatted string).
- It's strange, if not wrong, to consider months to be exactly
30days.
- You unnecessarily calculate
Math.round(difference_ms/ONE_DAY)twice.
yearAgeis a bad name for the variable at the beginning, since it doesn't contain anything concerning the year. And you reuse the variable later (then the name fits).
var today = new Date(yearNow,monthNow,dayNow);is wrong (and unnecessary), considering you just gotmonthNowfrom the current date and added1. Fortunately you don't actually use it.
- Testing for the full year to be below
100is unnecessary. OnlygetYearreturns such values.
- It probably would be better just to compare the day, month and year of the birthday and the current day, and do those calculation of the age in days and months only if needed.
Context
StackExchange Code Review Q#3142, answer score: 4
Revisions (0)
No revisions yet.