0

我正在从本地存储中读取日期,然后需要将其与另一个日期进行比较,但它不起作用。我想我需要对它进行类型转换,但是对 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");
    }

提前致谢!

4

3 回答 3

1

如果您在顶部的评论是正确的并且da_expiry_date正在返回一个字符串,那么您需要将其类型转换为日期,然后才能执行任何有意义的操作。最简单的方法是使用此处列出的方法之一。将字符串转换为日期的问题在于知道格式;如果您将所有部分分开,则可以只使用其他日期构造函数之一。:D

实际上,您的代码正在尝试获取字符串"2011,3,20",将数字添加2到其中,并将其设置为future_date. 浏览器最终将 2 转换为字符串并将其连接到末尾,给您"2011,3,202". setFullYear需要一个 int 而不是一个字符串,所以它不能完成它的工作。

在正确转换日期后,您可能希望该行切换到此:

future_date.setFullYear(da_expiry_date.getFullYear()+2);
于 2011-04-19T23:09:50.903 回答
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("-");
}
于 2011-04-19T23:27:05.013 回答
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 等。

于 2011-04-19T23:31:53.917 回答