我得到两个字符串形式像(巴西格式):“DD / MM / YYYY”,我需要比较两者。由于第一个字段是开头,最后一个字段是结尾,
我的验证开始于< = end
Date.new(begin)即使在ISO上也会生成'无效日期'!
答案 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)
。