2014-10-19 57 views
3

我正在計算直到特定日期的剩餘天數。我知道有一百萬種不同的方法和教程,但我想自己寫一個代碼。問題是該函數的輸出是「NaN」。我非常感謝你的幫助。使用JavaScript計算離開某個特定日期所剩的天數

這是我的代碼:

var daysLeft = function(input) { 
    var num = ''; 
    var date = []; 
    var x = 0; 
    for (i = 0; i < input.length; i++) { 
     if (!isNaN(input.charAt(i))) { 
      num += input.charAt(i); 
     } 
     else { 
      date[x] = parseInt(num, 10); 
      x++; 
     } 
    } 
    var inputDate = new Date(date[2], date[1], date[0]); 
    var today = new Date(); 
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime()); 
    return Math.ceil(timeDiff/(1000*3600*24)); 
}; 

daysLeft("11.12.2014"); 

BTW:我寫了這個代碼,因爲日期()函數的日期的美國格式(MM/DD/YYYY)而不是與UTC日期的作品。我也知道有Date.UTC()函數,但無論如何。我只是想自己轉過幾個月和幾天。

+0

插入'的console.log(日期); 「在for循環之後並在此輸出 – hindmost 2014-10-19 18:42:36

+0

輸出爲1,101,輸入「01.01.2015」 – Peter 2014-10-19 18:52:53

回答

1

當您解析num設置爲date[x]時,您需要將num重置爲''

... 
else { 
    date[x] = parseInt(num, 10); 
    x++; 
    num = ''; 
} 

你可能會考慮使用String.split()您輸入的時間分開。

0

你應該使用這樣的事情:

var daysLeft = function(input) { 
    var num = ''; 
    var date = []; 
    var x = 0; 
    for (i = 0; i < input.length; i++) { 
     if (!isNaN(input.charAt(i))) { 
      num += input.charAt(i); 
     } 
     else { 
      date[x] = parseInt(num, 10); 
      x++; 
      num=''; 
     } 
    } 
    date[x] = parseInt(num, 10); 
    var inputDate = new Date(date[2], date[1], date[0]); 
    var today = new Date(); 
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime()); 
    return Math.ceil(timeDiff/(1000*3600*24)); 
}; 
daysLeft("11.12.2014"); 
1

我的解決辦法是:

function isNumeric(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

var daysLeft = function(input) { 
    var num = ''; 
    var date = []; 
    var x = 0; 
    for (i = 0; i < input.length; i++) { 
     if (!isNaN(input.charAt(i)) && isNumeric(input.charAt(i))) { 
      num += input.charAt(i); 
     } 
     else { 
      date[x] = parseInt(num, 10); 
      x++; 
      num = ''; 
     } 
    } 
    date[x] = parseInt(num, 10); 

    var inputDate = new Date(date[2], date[1], date[0]); 
    var today = new Date(); 
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime()); 
    return Math.ceil(timeDiff/(1000*3600*24)); 
}; 

但更好的是:

function parseDate(input) { 
    var parts = input.split('-'); 
    // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]]) 
    return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based 
} 

var daysLeft = function(input) {  
    var inputDate = parseDate(input); 
    var today = new Date(); 
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime()); 
    return Math.ceil(timeDiff/(1000*3600*24)); 
}; 
相關問題