需要的Javascript,类型转换(我认为)

时间:2011-04-19 22:54:25

标签: javascript date casting compare typecast-operator

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

提前致谢!

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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("-");
}

答案 2 :(得分: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等。