2016-08-02 11 views
0

私は以下のコードで作業していますが、JSに関しては完全な初心者です。私はポストのygssoniのコードhereからこれを適応しました。より柔軟な日付入力のためにAngelaの編集がありました。年を月、日で計算する

生年月日を指定して、その瞬間に誰かの年齢を月と日で報告するにはどうすればよいですか?

function getAge(dateString) { 
    var now = new Date(); 
    var today = new Date(now.getYear(),now.getMonth(),now.getDate()); 

    var yearNow = now.getYear(); 
    var monthNow = now.getMonth(); 
    var dateNow = now.getDate(); 

    var dob = new Date(dateString); 

    var yearDob = dob.getYear(); 
    var monthDob = dob.getMonth(); 
    var dateDob = dob.getDate(); 
    var age = {}; 
    var ageString = ""; 
    var yearString = ""; 
    var monthString = ""; 
    var dayString = ""; 


    yearAge = yearNow - yearDob; 

    if (monthNow >= monthDob) 
    var monthAge = monthNow - monthDob; 
    else { 
    yearAge--; 
    var monthAge = 12 + monthNow -monthDob; 
    } 

    if (dateNow >= dateDob) 
    var dateAge = dateNow - dateDob; 
    else { 
    monthAge--; 
    var dateAge = 31 + dateNow - dateDob; 

    if (monthAge < 0) { 
     monthAge = 11; 
     yearAge--; 
    } 
    } 

    age = { 
     years: yearAge, 
     months: monthAge, 
     days: dateAge 
     }; 

    if (age.years > 1) yearString = " years"; 
    else yearString = " year"; 
    if (age.months> 1) monthString = " months"; 
    else monthString = " month"; 
    if (age.days > 1) dayString = " days"; 
    else dayString = " day"; 


    if ((age.years > 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months == 0) && (age.days > 0)) 
    ageString = "Only " + age.days + dayString + " old!"; 
    else if ((age.years > 0) && (age.months == 0) && (age.days == 0)) 
    ageString = age.years + yearString + " old. Happy Birthday!!"; 
    else if ((age.years > 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.years + yearString + " and " + age.months + monthString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.months + monthString + " and " + age.days + dayString + " old."; 
    else if ((age.years > 0) && (age.months == 0) && (age.days > 0)) 
    ageString = age.years + yearString + " and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.months + monthString + " old."; 
    else ageString = "Oops! Could not calculate age!"; 

    return ageString; 
} 


alert(getAge('09/09/1989')); 
+2

してみてください何かを、それは動作しませんなぜそれを私たちに尋ねる私は変更部分だけは、ライン48 &低かったです。 –

+0

あなたはそれを数年から数ヶ月に変換するように求めていますか? (つまり、「2 Years、2 Months、3 Weeks」の代わりに「26 Months、3 Weeks」になるでしょうか?) –

+0

@JonathanM私が言及したように、私はJSに関しては完全な初心者です。私はこのコードを見つけ、ちょうどそれが私が探していて実際に働いていたものに近いところにあったことは幸運にも得ました。 – 406LQE

答えて

1

あなたは、本質的にあなたのコードの後半部分で「年」へのすべての参照を削除し、大規模な再記述する必要があり、このようなjsFiddle /他のセクションの場合。

var totMonths = age.months + 12 * age.years; 
if (totMonths > 1) monthString = " months"; 
else monthString = " month"; 
if (age.days > 1) dayString = " days"; 
else dayString = " day"; 


if ((totMonths == 0) && (age.days > 0)) { 
    ageString = "Only " + age.days + dayString + " old!"; 
} else if ((totMonths > 0) && (age.days == 0)) { 
    ageString = totMonths + monthString + " old."; 
} else if ((totMonths > 0) && (age.days > 0)) 
    ageString = totMonths + monthString + " and " + age.days + dayString + " old."; 
} else ageString = "Oops! Could not calculate age!"; 
+0

助けてくれてありがとう、今私は少なくとも始める場所がある。 – 406LQE

0

はこれを試してみてください:

var dob = new Date("1/1/2016"); 
    var now = new Date(); 
    var timeMiliseconds = Math.abs(now.getTime() - dob.getTime()); 
    var days = Math.ceil(timeMiliseconds/(1000 * 3600 * 24)); 
    var monthsElapsed = Math.ceil(timeMiliseconds/(1000 * 3600 * 24 * 30)) 
    var daysElapsed = days % 30 
    alert(monthsElapsed); 
    alert(daysElapsed); 
関連する問題