2011-04-19 90 views
0

我正在從本地存儲讀取日期,然後需要將其與另一個日期進行比較,但不起作用。我想我需要註明它,但用Javascript很生鏽,請看看,我的代碼並不多:Javascript,類型轉換需要(我認爲)

// ****** ### IMPORTANT: The below line returns "2011,3,20" ### ******* 
var da_expiry_date = localStorage['list_expiry_date']; 

var today_date = new Date(); 
var future_date = new Date(); 

future_date.setFullYear(da_expiry_date+2); 
alert (future_date+"\n"+today_date); 

    if (future_date>today_date) { 
     alert("1"); 
    } 
    else { 
     alert("2"); 
    } 

在此先感謝!

回答

1

如果您對上面的評論是正確的,並且da_expiry_date正在返回一個字符串,那麼您需要對它進行類型轉換,然後才能做任何有意義的事情。 The easiest way to do this is with oneof the methods listed here.將字符串轉換爲日期的問題是知道格式;如果你有所有的片斷分開,你可以只使用其中一個date constructors.:D

因爲它是,你的代碼試圖採取字符串"2011,3,20",添加數字2它,並將其設置爲全年的future_date。瀏覽器最終將2轉換爲一個字符串並將其連接到最後,給你"2011,3,202"setFullYear需要一個int而不是一個字符串,所以它不能完成它的工作。

您可能希望該行切換到這一點,你已經得到了你的後日期正確轉換:

future_date.setFullYear(da_expiry_date.getFullYear()+2); 
+0

謝謝!選擇你的答案! – Ryan 2011-04-19 23:34:07

0

我不知道你在這一行嘗試什麼:

da_expiry_date+2; 

其結果是:

2011,3,202 

...這是不是一個有效的價值傳遞到setFullYear。那麼,讓我們來解析日期:

var da_expiry_date = localStorage['list_expiry_date']; 

function pad(num, n) { 
    return ("0" + num).slice(-n); 
} 

function formatDate(date) { 
    var p = date.split(","); 
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-"); 
} 

var today_date = new Date(); 
var future_date = new Date(formatDate(da_expiry_date)); 

alert (future_date+"\n"+today_date); 

if (future_date>today_date) { 
    alert("1"); 
} else { 
    alert("2"); 
} 

如果你試圖添加2到一年,然後做它,你可以擊碎日將其組件後:

function formatDate(date) { 
    var p = date.split(","); 
    p[0] = p[0] * 1 + 2; // add 2 to the year 
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-"); 
} 

或者,即使好,參數吧:

function formatDate(date, n) { 
    var p = date.split(","); 
    p[0] = p[0] * 1 + n; // add n to the year 
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-"); 
} 
0

您需要先分析它作爲一個日期,試試這個:

var dateFromLocalStorage = function(s) { 
    var m = (""+s).match(/^(\d+),(\d+),(\d+)$/); 
    return (m) ? new Date(m[1], m[2], m[3]) : null; 
}; 
dateFromLocalStorage("2011,3,20"); // => Wed Apr 20, 2011 ... 

請注意日期構造函數以月爲基礎的整數,所以Jan = 0,Feb = 1,Mar = 2等。