-1

这很简单,我不知道 if 语句从不 tue 的原因:

var sFrom = $('#from').val(); //2013-10-04
var sTo = $('#to').val(); //2013-10-06

var dFrom = Date.parse(sFrom); 
var dTo = Date.parse(sTo); 

var dFullDate = new Date(item.created*1000);
var sDate = dFullDate.getFullYear() + "-" + (dFullDate.getMonth()+1) + "-" + dFullDate.getDate();
var dDate = Date.parse(sDate); //2013-10-5 should work, but nothing works

if((dDate > dFrom) && (dDate < dTo)){
  insertItem(i, item);
}

更新

它正在比较两个日期,其中一个日期或月份为一位数(如果小于 10)。因此,我所做的只是添加了一个将其转换为两位数的函数,并且现在可以进行比较。

function parseDateToYYYYMMDD(date){
    var year = date.getFullYear();
    var month = date.getMonth()+1;
    var day = date.getDate();

    if(month < 10){
        month = "0" + month;
    }

    if(day < 10){
        day = "0" + day;
    }

    var sDate = year + "-" + month + "-" + day;
    var dDate = Date.parse(sDate);
    return dDate;
}
4

1 回答 1

1

根据您使用的浏览器,Date.parse可能不支持该YYYY-MM-DD格式,该格式仅在 ECMAScript5 (大约四年前)时才添加到规范中。

尽管它从未出现在规范中,但几乎所有浏览器都支持YYYY/MM/DD.

因此,例如,虽然您的代码( source ) 可以在 Chrome 上运行,但它不能在 IE8 上运行。如果我们将它更新为使用/而不是-( source ),它可以在 Chrome 和 IE8 上运行。

当然,你也可以自己解析它:

function parseYYYYMMDD(str) {
    var parts = str.split('-');
    return +new Date(
        parseInt(parts[0], 10),     // Year
        parseInt(parts[1], 10) - 1, // Month (starts with 0)
        parseInt(parts[2], 10)      // Day
    ); 
}

如果您正在做大量的日期工作,可能值得查看像MomentJS这样的日期库。不过,为此添加它可能有点矫枉过正。

于 2013-10-28T09:10:11.407 回答