2012-03-21 110 views
0

我需要計算出某人有多少天,但我不確定數學。這是我到目前爲止有:計算一個人有多少天?

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 zodAnimal = new Array('Rat','Ox','Tiger','Rabbit','Dragon','Snake','Horse','Goat','Monkey','Rooster','Dog','Pig'); 
var zodAnimalD = new Array('Forthright, tenacious, intense, meticulous, charismatic, sensitive, intellectual, industrious, charming, eloquent, sociable, artistic, and shrewd. Can be manipulative, vindictive, self-destructive, envious, mendacious, venal, obstinate, critical, over-ambitious, ruthless, intolerant, and scheming.','Dependable, ambitious, calm, methodical, born leader, patient, hardworking, conventional, steady, modest, logical, resolute, and tenacious. Can be stubborn, dogmatic, hot-tempered, narrow-minded, materialistic, rigid, and demanding.','Unpredictable, rebellious, colorful, powerful, passionate, daring, impulsive, vigorous, stimulating, sincere, affectionate, humanitarian, and generous. Can be restless, reckless, impatient, quick-tempered, obstinate, selfish, aggressive, and moody.','Gracious, good friend, kind, sensitive, soft-spoken, amiable, elegant, reserved, cautious, artistic, thorough, tender, self-assured, shy, astute, compassionate, lucky, and flexible. Can be moody, detached, superficial, self-indulgent, opportunistic, and stubborn.','Magnanimous, stately, vigorous, strong, self-assured, proud, noble, direct, dignified, eccentric, intellectual, fiery, passionate, decisive, pioneering, artistic, generous, and loyal. Can be tactless, arrogant, imperious, tyrannical, demanding, intolerant, dogmatic, violent, impetuous, and brash.','Deep thinker, wise, mystic, graceful, soft-spoken, sensual, creative, prudent, shrewd, elegant, cautious, responsible, calm, strong, constant, and purposeful. Can be a loner, bad communicator, possessive, hedonistic, self-doubting, distrustful, mendacious, suffocating, and cold.','Cheerful, popular, quick-witted, changeable, earthy, perceptive, talkative, agile, magnetic, intelligent, astute, flexible, and open-minded. Can be fickle, arrogant, childish, anxious, rude, gullible, and stubborn.','Righteous, sincere, sympathetic, mild-mannered, observant, artistic, intellectual, ingenious, innovative, creative, mothering, peaceful, and generous. Can be indecisive, over-passive, worrier, pessimistic, sensitive, shy, and weak-willed.','Inventor, motivator, improviser, quick-witted, inquisitive, flexible, innovative, problem solver, self-assured, sociable, artistic, polite, dignified, competitive, objective, and factual. Can be egotistical, vain, arrogant, selfish, reckless, snobbish, deceptive, manipulative, cunning, jealous, suspicious, and stubborn.',' Acute, neat, meticulous, organized, self-assured, decisive, conservative, critical, perfectionist, alert, zealous, practical, scientific, and responsible. Can be over zealous and critical, puritanical, egotistical, abrasive, proud, opinionated, and gives into empty bravado.','Honest, intelligent, straightforward, loyal, sense of justice and fair play, attractive, amicable, unpretentious, sociable, open-minded, idealistic, moralistic, practical, affectionate, sensitive, and easy going. Can be cynical, lazy, cold, judgmental, pessimistic, worrier, stubborn, and quarrelsome.','Honest, gallant, sturdy, sociable, peace-loving, patient, loyal, hard-working, trusting, sincere, calm, understanding, thoughtful, scrupulous, passionate, and intelligent. Can be naive, over-reliant, self-indulgent, gullible, fatalistic, and materialistic.'); 
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); 
var dCurrent = new Date(); 
dCurrent = dCurrent.getTime(); //Grabs the time of the current date in milliseconds. 
var dTotal = dCurrent - d; 
alert(dTotal); 
dTotal = dTotal/milliDay; 
dTotal = Math.floor(dTotal); //7193 
alert(dTotal + ' is after division'); 
dTotal = dTotal/365.25; 
dTotal = Math.floor(dTotal); 
alert(dTotal + ' is how old you are!'); 
dTotal = birthYear - zodCycle; 
dTotal = dTotal % chineseZod; 
alert(dTotal); 
alert(d); 
var testS; 
testS = dCurrent - d; 
testS = testS/milliDay; 
testS = testS * 365.25; 
document.write("<span style=\"color: red;\">" + 'Your birthday is ' + d.toDateString() + "</span>"); 
alert(testS); 
+3

什麼是你的問題? – 2012-03-21 09:11:22

+0

最佳做法是爲此寫一點測試:取三個或更多預定義的出生日期,並將它們與預定義的結果(http://www.timeanddate.com/date/duration.html)進行比較。這會更容易,因爲使用警報和SO代碼審查=) – 2012-03-21 09:22:12

回答

0

我不太確定究竟如何在JavaScript中實現這一點,但你爲什麼不基於用戶的出生日期時間戳,從目前的減去它時間戳,然後(假設時間戳以秒爲單位)將其除以一天中的秒數?

2

這實際上比這更容易。一旦你有兩個日期(自己的生日和「現在」),你只需做到這一點:

var days = Math.floor((now - birthDate)/86400000); 

這是因爲在JavaScript中,因爲大紀元毫秒Date objects保持時間,當你對他們做數學,他們使用該毫秒值(並且結果是毫秒數)。而且JavaScript每天準確的假設爲86,400,000毫秒。

所以一旦你有birthYearmonthNum,並birthDay

var birthDate = new Date(birthYear, monthNum, birthDay); 
var days = Math.floor((new Date() - birthdate)/86400000); 

Live example using a datepicker | source

+0

這是有效的,但我也需要將該值「轉換」爲一個整數並將其寫成藍色爲「您一直活着x天」。我忘了如何用js轉換爲整數。 – Chara 2012-03-21 09:19:38

+0

@Chara:該值已經是一個整數(JavaScript內部沒有整數,所有數字都是浮點數),這就是我使用'Math.floor'的原因。我剛剛給答案添加了一個完整的例子,這應該有所幫助。 – 2012-03-21 09:30:53

+0

謝謝,它工作! – Chara 2012-03-21 09:35:15