2011-08-18 78 views
1

雖然我比較了javascript中的兩個日期,但是在計算日期時我得到了奇怪的值。我的Javascript有什麼問題日期比較

任何人都可以在我的代碼中看到任何明顯的東西導致問題?

問題是今天的日期變量看起來像一個正常的日期,但我的下週和上週的計算出來大數字和比較將無法正常工作。

//Handles client side date selection changed 
function dateSelectionChanged(sender, args) { 

    //Declare array for Day names 
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 

    //Get the date 
    var date = sender.get_selectedDate(); 

    //Get todays Date 
    var today = new Date(); 
    var nextWeek = new Date().setDate(today.getDate() + 7); 
    var lastWeek = new Date().setDate(today.getDate() - 7); 

    //Show the day name 
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]); 

    if (date < lastWeek) { 
     alert('Date Under Week'); 
    } 
    if (date > nextWeek) { 
     alert('Date Over Week'); 
    } 
} 

這裏是在調試代碼,所以你可以看到值: enter image description here

編輯: 解決方案

//Handles client side date selection changed 
function dateSelectionChanged(sender, args) { 

    //Declare array for Day names 
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 

    //Get the date 
    var date = sender.get_selectedDate(); 

    //Get todays Date 
    var today = new Date(); 
    var nextWeek = new Date().setDate(today.getDate() + 7); 
    var lastWeek = new Date().setDate(today.getDate() - 7); 

    //Get the dates in easier to compare format 
    nextWeek = new Date(nextWeek); 
    lastWeek = new Date(lastWeek); 

    //Show the day name 
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]); 

    if (date < lastWeek) { 
     alert('Date Under Week'); 
    } 
    if (date > nextWeek) { 
     alert('Date Over Week'); 
    } 
} 
+0

究竟是什麼問題?你獲得的數字很大嗎? – pimvdb

+0

@pimvdb - 更新的問題。 – WraithNath

+0

只是一個評論,因爲這不是一個完整的答案。另一種方式,你可以做到這一點將強制「今天」是一個數字。這實際上很簡單:'today = +(new Date());' – nickf

回答

2

對於setDate,JavaScript的返回時間戳,它們代表從1970年1月1日00:00:00到特定時間的毫秒數。它可能看起來毫無用處,但事實上它非常有用,因爲您可以將任何時間表示爲一個簡單的數字。

如果你想回到一個Date,你可以使用:

new Date(timestamp); 

所以如添加:

nextWeek = new Date(nextWeek); 
lastWeek = new Date(lastWeek); 
+0

謝謝,看起來像它排序的問題。沒有幫助,我比較今天的日期與下週和上週,而不是選定的日期! – WraithNath

+0

@WithithNath:糟糕,我沒有看到。您可能需要'date.setDate'來代替。 – pimvdb

-1

如果提供任何參數,構造函數創建根據本地時間今天 的日期和時間的Date對象。如果您提供了一些 參數,但不提供其他參數,則丟失的參數將設置爲0.如果您提供任何參數 ,則必須至少提供年份,月份和 一天。您可以省略小時,分鐘,秒和毫秒。

該日期以毫秒爲單位,以毫秒爲單位,自1970年1月1日午夜 UTC以來。 一天持有86,400,000毫秒。日期對象範圍是 -100,000,000天至100,000,000天,相對於1970年1月1日 UTC。

試試下面的代碼,而比較日期

if (today < lastWeek.getMilliseconds()) { 
     alert('Date Under Week'); 
    } 
    if (today > nextWeek.getMilliseconds()) { 
     alert('Date Over Week'); 
    } 

Date對象提供跨平臺的統一行爲。

+0

謝謝,剛剛意識到我也在比較今天的日期與上週和下週,這將永遠不會工作!更新了代碼以使用所選日期。 – WraithNath

+1

由於'lastWeek'和'nextWeek'是數字,所以這些函數不可用。此外,它在一秒內返回毫秒數,所以它不是非常有用,而且在這種情況下它們是相同的,因爲只有日期編號已被更改。 – pimvdb

+0

你是否隨意選擇了'getMilliseconds'? – katspaugh

0

另一種方法是設置這樣的日期。

var today = new Date(); 
var nextWeek = new Date(); 
nextWeek.setDate(today.getDate() + 7); 
var lastWeek = new Date(); 
lastWeek.setDate(today.getDate() - 7);