2012-03-23 57 views
2

所以,我知道這可能是一個常見問題,但我似乎無法解開它在我腦海中。日期和Javascript

在Javascript中,我試圖創建一個倒數計時器,而不使用作弊(意思是借用某人的腳本),因爲我們的婚禮日期正好在九月份。

我知道了將日子轉換成月和日是多麼困難。

對那些數學大師來說,是否有可能在JavaScript中定義每個月並使用它來倒計時,然後跟進if語句,如果日期過去了,這是多少天過去了。我喜歡數學,但我似乎無法弄清楚這個公式,這令我很沮喪。

9月22日是一天。

我知道這段文字的寫作時間有183天。我也手算日子來驗證。我可以通過公式向我展示這一點。

但是如果我每個月都定義一次以及該月的天數,它會是一個冗長的「if語句」,包括所有月份嗎?或者它可能是一個長期的表達?

variable = weddingDate - (?) 

我不需要它寫,如果有人可以幫助一些alegbra! :)


編輯

var d1, d2; 

d1 = new Date('3/23/2012'); 
d2 = new Date('9/22/2012'); 

compare = d2-d1 

document.write((compare) /1000/60/60/24); 

所以這天返回的準確數量。這實際上比人們想象的要容易得多。我知道我可以根據個人電腦的日期更改自動更新的d1。

但是,從幾天到幾個月和幾天準確轉換的公式是什麼?

我知道你可以採取

document.write((compare) /1000/60/60/24); 

,並切換到

document.write(((compare) /1000/60/60/24)/30.4368499); 

然後,我可以一輪這將是6(又名6個月)最近的整數,再減去從總的,留下小數點。那麼我可以通過30.4368499倍。但我不確定是否有更好的方法來做到這一點。

+1

恭喜上要結婚了! :-) – 2012-03-23 16:21:59

+1

'variable = weddingDate - Date.now()'應該做的伎倆,如果你讓weddingDate日期對象。然後可以操作生成的對象來查找到那之前的日子,月份和時間。 – jzworkman 2012-03-23 16:22:48

+0

@jzworkman:'Date.Now'應該是'Date.now()'。 – 2012-03-23 16:24:00

回答

5

JavaScript Date對象可以爲您提供一個值,該值代表日期與過去稱爲「epoch」的點之間的「距離」。通過減去兩個這樣的值,然後除以一天中的秒數,就可以得到一個天數。

查找.getTime()方法。 (只需從另一個實際工作中減去一個日期,因爲JavaScript的要挾對象,數量和方式Date對象變成一個數字是有效地調用.getTime()

(不寫代碼,因爲你明智的要求只是過程。)

+0

謝謝。儘管如此,我仍然困惑於將日期轉換爲數月和數天。這個公式是如何創建的? – traveler84 2012-03-23 17:25:56

+2

啊,這是一個不同的故事。這實際上很棘手,因爲月份有不同的天數。但是,您可以利用的一件事是,JavaScript Date對象具有「智能」的.setDate方法。如果您將該函數的月份設置爲月末之後的一天(如32),則它會轉入下一個月。因此,您可以編寫一個循環,以增加月份的日期並計算月份值更改的次數! – Pointy 2012-03-23 18:06:08

+0

謝謝。這是有道理的。 – traveler84 2012-03-23 18:34:43

1
var END_TIME = new Date("2012-11-11").getTime(); // replace 2012-11-11 with actual weddding day 
if (new Date().getTime() > END_TIME) { 
    alert("WE MADE IT"); 
} 

欲瞭解更多信息https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

+0

雖然這有效,但我試圖比較兩個日期並將其發佈在我的網站上,以便我們可以登錄查看剩下多少天。所以我試圖從幾天轉換到幾個月和幾天。 – traveler84 2012-03-23 17:27:00

0

//月份是tricky-如果你想和天,你會做,現在...

//我認爲上每個月的22個月要返回的月數和沒有天數等等。

function bigDay(d){ 
    var now= new Date(), 
    days1= now.getDate(), 
    months1= now.getMonth(), 
    days2= d.getDate(), 
    months2= d.getMonth(), 
    days= 0, months= months2-months1, 
    daysinmonth= (new Date(now.getFullYear(), now.getMonth()+1, 0)).getDate(); 
    if(d-now<0) return ''; 
    if(months> 0){ 
     if(days1>days2){ 
      days= (daysinmonth-days1)+days2; 
      --months; 
     } 
     else days= days2-days1; 
    } 
    else days= days2-days1; 
    return months+' months '+(days?' and '+days+' days.': ''); 
} 

警報(bigDay(新日期(2012年,8,22)))

//你可以使用文件撰寫或innerHTML的或其他)