【问题标题】:Javascript, typecasting needed (I think)Javascript,需要类型转换(我认为)
【发布时间】:2011-04-19 22:54:25
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: javascript date casting compare typecast-operator


    【解决方案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);
    

    【讨论】:

    • 谢谢!选择了你的答案!
    【解决方案2】:

    我不确定你在用这条线做什么:

    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("-");
    }
    

    【讨论】:

      【解决方案3】:

      您需要先将其解析为日期,试试这个:

      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 等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        相关资源
        最近更新 更多