Javascript比较两个日期,从字符串,开始< =结束

时间:2010-02-25 17:23:37

标签: javascript validation date

我得到两个字符串形式像(巴西格式):“DD / MM / YYYY”,我需要比较两者。由于第一个字段是开头,最后一个字段是结尾,

我的验证开始于< = end

Date.new(begin)即使在ISO上也会生成'无效日期'!

6 个答案:

答案 0 :(得分:8)

请勿使用Date.new。使用new Date()。由于日期字符串的格式,我建议单独抓取每个字段并将它们传递给构造函数:

var startYear = parseInt(document.getElementById('startYear'), 10);
var startMonth = parseInt(document.getElementById('startMonth'), 10) - 1; // as per Residuum's comment
var startDay = parseInt(document.getElementById('startDay'), 10);
var start = new Date(startYear, startMonth, startDay);

等。如果您交了一个日期字符串,那么您可以使用模糊棒棒糖的方法从字符串中获取每个字段。但是,我不确定Date构造函数是否会接受各个字段的未解析字符串。

一旦你有两个你想要比较的日期,只需比较自纪元以来的毫秒数值:

function isValid(start, end) {
    return start.getTime() < end.getTime();
}

答案 1 :(得分:5)

有一个很好的日期处理库datejs,它有一个parseExact(dateStr, format)方法。

答案 2 :(得分:2)

你可以这样做,如果你知道你的日期将始终以相同的方式格式化dd / mm / yyyy

today = "23/02/1001";
dateComponents = today.split("/");
date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]);

但更好的解决方案是查看此页面Datejs,这是日期处理的一个很好的替代方案。

答案 3 :(得分:1)

快点肮脏:

function is_valid (start , end) {
     return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ;
}

也就是说,将日期拆分为组件,反转顺序再次加入它们并进行字符串比较。

编辑:如评论中所述,当然,如果您的小于10的月/日未填零,则此功能无效。

答案 4 :(得分:1)

JS时代世界的新“热度”:http://momentjs.com/ 也适合这个用例

答案 5 :(得分:0)

以下是Javascript中日期对象的所有可用构造函数:

dateobject = new Date(); // returns date of current time stamp
                         // on the browser
dateobject = new Date("Month Day, Year Hours:Minutes:Seconds");
dateobject = new Date(Year, Month, Day);
dateobject = new Date(Year, Month, Day, Hours, Minutes, Seconds);
dateobject = new Date(Milliseconds);

选择您尝试使用的那个,但在我的情况下我会选择new Date(Year, Month, Day);

修改 注意:Month在Javascript中从零开始,因此2010年1月1日将为new Date(2010, 0, 1),2011年12月31日为new Date(2010, 11, 31)