2012-03-20 66 views
1

ユーザーに出生情報を入力させた後、年齢をミリ秒に変換して現在の日付から減算して年齢を返したいのですが、どうすればいいですか正しく?:入力と日付のオブジェクトから年齢を計算する

var birthYear = parseInt(prompt ('Enter your birth year:')); 
var birthMonth = prompt ('Enter the name of the month of birth:'); 
var birthDay = parseInt(prompt ('Enter your day of birth as an integer:')); 
var milliDay = 1000*60*60*24; //Milliseconds in a day 
monthAbb = 'janfebmaraprmayjunjulaugsepoctnovdec'; 
chineseZod = 12; 
zodCycle = 1924; //Chinese Zodiac Cycle 
var monthArr = new Array(11); 


monthArr [0] = "jan"; 
monthArr [1] = "feb"; 
monthArr [2] = "mar"; 
monthArr [3] = "apr"; 
monthArr [4] = "may"; 
monthArr [5] = "jun"; 
monthArr [6] = "jul"; 
monthArr [7] = "aug"; 
monthArr [8] = "sep"; 
monthArr [9] = "oct"; 
monthArr [10] = "nov"; 
monthArr [11] = "dec"; 

var monthNum = monthAbb.indexOf(birthMonth.slice(0, 3).toLowerCase())/3; 
alert(monthNum); 
var d = new Date (birthYear, monthNum, birthDay); 
alert(d); 
+1

新しい日付(NEWDATE()getTime() - 。新しい日付(birthYear、monthNum、誕生日).getTime())。getTime()/ 1000/3600/24/365.25; –

+1

年齢をミリ秒単位で計算すると、年齢よりも大きな単位で年齢を確実に表示することはできません。より大きな時間単位(例:年)は長さが異なるため、生年月日と今日の日付の違いだけでなく、生年月日から年齢を計算する必要があります。 – Guffa

+0

- getTime()メンバ関数を使用して、Dateオブジェクトの時間をミリ秒単位で取得します。 - 現在の時刻からユーザの生年月日を控えます。 これは私が行うべきことです。 – Chara

答えて

0
var today=new Date(); 
var millisec=today.getTime(); 
alert(millisec); 

これはミリ秒で、あなたの時間を返します。上記または夏時間のうちの変化によって影響され得る

var dt1 = new Date(); 
    var age = (dt1.getTime() - d.getTime())/(60 * 60 * 24 * 1000); 
0
var d0 = new Date(2012, 0, 1); // 1 January 2012 
var d1 = new Date(2012, 2, 31); // 31 March 2012 

alert(d1 - d0); // 7776000000 which is the difference in milliseconds 

- :年齢を計算する例えば
。それを避けるために、UTCを使用します。

var d0 = Date.UTC(2012, 0, 1); // 1 January 2012 
var d1 = Date.UTC(2012, 2, 31); // 31 March 2012 

alert(d1 - d0); // 7776000000 which is the difference in milliseconds 
0

閏年は、あなたがしたい場合は、たとえば、18歳の彼の実際の誕生日まで2、3日差を待つように計上される必要があります。

年を365.25 * 24 * 60 * 60 * 1000と見積もることができ、しばしば正しいでしょう。

function agefromYMD(y, m, d){ 
    var years, months, days, dA, nA, 
    dob= new Date(y, m-1, d), 
    now= new Date(); 
    now.setHours(0, 0, 0, 0); 
    return Math.floor((now-dob)/(365.25*24*60*60*1000)); 
} 

または、日付、月、および満月を見ることができます。

function agefromYMD(y, m, d){ 
    var years, months, days, dA, nA, 
    dob= new Date(y, m-1, d), 
    now= new Date(); 
    now.setHours(0, 0, 0, 0); 
    dA= [dob.getUTCFullYear(), dob.getUTCMonth(), dob.getUTCDate()]; 
    nA= [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; 
    years= nA[0]-dA[0]; 
    months= nA[1]-dA[1]; 
    days= nA[2]-dA[2]; 
    if(months<=0 && days<0)--months; 
    if(months<0)--years; 
    return years; 
} 

agefromYMD(1984,2,26)

関連する問題