javascript日期验证使用字符串进行比较
javascript validation for dates takes string for comparison
有一段时间,我在SO中问过如何验证startdate<结束日期。
我写的JS如下;
function DateValidation(startDate, endDate) {
if (startDate != ' ' && endDate != ' ')
{
var stdate = Date.parse(startDate);
var enddate = Date.parse(endDate);
if (stdate > enddate)
{
alert('Start date cannot be greater than end date!');
return false;
}
else
{
return true;
}
}
}
该函数在单击提交按钮时被调用。它注册为;
OnClientClick="javascript: return DateValidation(window.document.getElementById('txtStartDate').value,window.document.getElementById('txtEndDate').value);"
现在假设开始日期为2011年10月4日(2011年10日4日(,结束日期为2011年底12月2日(2011年底2日(。在这种情况下,警报不应该被触发,但它仍然会被触发(因为04>02(。
我在这里犯了什么错误?
您的开始日期&endDate参数应为mm/dd/yyyy格式。但是您以dd/mm/yyyy格式提供了它们,所以发生了意想不到的事情。
我遇到过这种问题B4。如果您的网站的客户端都要以"dd/mm/yyyy"的格式键入日期-时间,那么您需要一个"correctDate(("函数来将输入日期字符串中的日期部分替换为月份部分。
功能可能如下所示:
function correctDate(D){
var D=D.split('/');
return D[1]+'/'+D[0]+'/'+D[2]
}
//input : 2/10/2011 , output : 10/2/2011
在DateValidation((函数中,您可以这样使用它:
....
var stdate = Date.parse( correctDate(startDate) );
var enddate = Date.parse( correctDate(endDate) );
if (stdate > enddate){
....
<script type="text/javascript">
var d = Date.parse("Jul 8, 2005");
document.write(d);
</script>
上述代码的输出将是:11207736000
所以你的推理不可能是正确的。解析后,尝试提醒stdate和enddate。那里正在发生一些事情。
您所犯的错误是Date.parse
将xx/xx/xxxx格式的字符串解释为以月份开头的美式日期。04/10/2011
取为4月10日,而不是10月4日。
这是一份成绩单:
> var startDate = '04/10/2011';var stdate = Date.parse(startDate)
> startDate
04/10/2011
> stdate
1302418800000
> var endDate = '02/12/2011';var enddate = Date.parse(endDate);
> endDate
02/12/2011
> enddate
1297497600000
> stdate > enddate
true
IMHO你应该避免像这样模棱两可的日期格式。如果要使用日期字符串,请强制用户输入ISO8601(yyyy/MM/dd(格式的文本。
ECMAScript 5浏览器对ISO8601提供了不错的支持。另请参阅Date.js库。或者这个SO问题,了解更多信息。
附录
内置的Date.parse
函数在此处进行了说明。您可以看到它不支持DD/MM/YYYY。虽然一个邪恶的程序员可以接受DD/MM/YYYY形式的字符串,并使用substring
和concat
(或正则表达式(以Date.parse
的可接受格式进行重写,但我认为你不是一个邪恶程序员。
正确的解决方案是使用一个接受格式字符串的日期解析器。对于JavaScript,一个这样的库是Date.js。它将允许您编写以下内容:
Date.parseExact("20/04/2011", "dd/MM/yyyy");
并得到对应于2011年4月20日的日期对象。
- 如何使用 JavaScript 比较字符串变量
- 替换函数后的Javascript比较字符串不起作用
- 如何比较字符串是javascript
- 比较字符串,如果存在小的拼写错误,则返回 true
- Javascript - 比较字符串环境
- 如何在忽略特殊字符的 javascript 中比较字符串
- 比较字符串中的单词
- 在 javascript 中比较字符串与日期时间的问题
- 比较字符串以查找缺少的子字符串
- 比较字符串是否以符号 @ jquery 或 javascript 开头
- 如何在 Javascript 中比较字符串数组
- 从提示返回的Javascript比较字符串
- 比较字符串的准确性(包括偏移)
- 在比较字符串的字符后创建新数组&大堆
- 在键入时比较字符串
- 如何在JavaScript中比较字符串
- javascript比较字符串(用于日期目的)
- JQuery比较字符串时出错
- Jquery比较字符串在POST中不起作用
- JS比较字符串和换行符