2011-04-19 64 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等。

相关问题