0

此功能在 Chrome 中运行良好......但不是 IE 或 FF。

我正在尝试验证两个采用 MonthName YearNumber 值的字段(请参见屏幕截图)。

形式

Date.parse()用来获取毫秒,然后比较 if Start Date<= End Date

function IsStartEndDtError(StartDt, EndDt) {
    //convert dates to miliseconds to compare if one is greater than other
    var StartDtMili = Date.parse(StartDt);
    var EndDtMili = Date.parse(EndDt);

    if (StartDtMili <= EndDtMili) {
        return false;
    }
    else {
        return true;
    }
}

Firebug 中出现的内容:

表格2

4

2 回答 2

2

由于您的日期格式不受普遍支持,您可以尝试使用Date.js 之类的库:

Date.parse("November 2012")
// returns: Thu Nov 01 2012 00:00:00 GMT+0000 (GMT)

如果您不想要另一个库,您可以手动将月份名称替换为数字并创建一个新的日期字符串。

如果您查看规范中的“第 15.9.1.15 节日期时间字符串格式”,Ecmascript 似乎不支持完整的月份名称。

在火狐中:

new Date("November 2012")
// Invalid Date
new Date("2012-11")
// Thu Nov 01 2012 00:00:00 GMT+0000 (GMT)

第二种日期格式应该跨浏览器标准化,第一种不是。

于 2012-12-01T13:30:25.833 回答
1

11 1999,November 1999不是可解析的格式。您要么需要使用更灵活的输入格式的日期库,要么处理您的输入并识别其中的部分:

function IsStartEndDtError(StartDt, EndDt) {

    var months = {
        January: 0,
        February: 1,
        ...
    };

    //convert dates to miliseconds to compare if one is greater than other

    var StartDtMili = (new Date(StartDt.split(" ")[1], month[StartDt.split(" ")[0]])).getTime();
    var EndDtMili = (new Date(EndDt.split(" ")[1], month[EndDt.split(" ")[0]])).getTime();


    if (StartDtMili <= EndDtMili) {
        return false;
    }
    else {
        return true;
    }
}
于 2012-12-01T13:31:35.917 回答