【发布时间】:2011-01-21 02:54:06
【问题描述】:
我得到两个格式为(巴西格式)的字符串:“DD/MM/YYYY”,我需要比较两者。由于第一个字段是开始,最后一个是结束,
我的验证开始
Date.new(begin) 即使在 ISO 上也会生成“无效日期”!
【问题讨论】:
标签: javascript validation date
我得到两个格式为(巴西格式)的字符串:“DD/MM/YYYY”,我需要比较两者。由于第一个字段是开始,最后一个是结束,
我的验证开始
Date.new(begin) 即使在 ISO 上也会生成“无效日期”!
【问题讨论】:
标签: javascript validation date
不要使用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();
}
【讨论】:
有一个不错的日期处理库,名为 datejs,它有一个 parseExact(dateStr, format) 方法。
【讨论】:
您可以这样做,如果您知道您的日期将始终以 dd/mm/yyyy 相同的方式格式化
today = "23/02/1001";
dateComponents = today.split("/");
date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]);
但更好的解决方案是查看此页面,Datejs 是日期处理的一个很好的替代方案。
【讨论】:
又快又脏:
function is_valid (start , end) {
return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ;
}
也就是说,将日期拆分为组件,将它们颠倒顺序再次加入并进行字符串比较。
编辑:如评论中所述,如果您的月/日小于 10 没有填充零,这当然不起作用。
【讨论】:
JS时代世界的新“热”:http://momentjs.com/ 也适合这个用例
【讨论】:
以下是 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)。
【讨论】: