如何判断日期有效性--弱智问题,解决立马结贴

glfwyz 2004-10-15 10:33:52
想问一下各位大侠,JSP或JS里有没有象PHP里checkdate()--检验时间有效性的函数?
...全文
178 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
寒山石 2004-10-15
up
回复
monkeyhjl 2004-10-15
/*验证日期的合法性*/
function isDate(objyear,objmon,objday){
var year = objyear.value;
var mon = objmon.value;
var day = objday.value;
var count = -1;
switch (mon)
{
case '1':
case '3':
case '5':
case '7':
case '8':
case '10':
case '12':
count = 31;
break;
case '4':
case '6':
case '9':
case '11':
count = 30;
break;
case '2':
if (year % 4 == 0)
count = 29;
else
count = 28;
if ((year % 100 == 0) & (year % 400 != 0))
count = 28;
}
if (day > count){
alert(year+"年"+mon+"月没有"+day+"号!");
return false;
}
else
return true;
}
回复
gtfcccq 2004-10-15
还有可以,查找一下最新版struts,里面有一个js,专门检验时间,稍微改一下,就可以改成java文件
回复
gtfcccq 2004-10-15
/**
* 只支持格式非法,应该为“yyyy-MM-dd”形式的检测
* 返回""表示合法,否则不合法
* @param onlyDate String
* @return String
*/
private static String isValidDate(String onlyDate)
{
StringBuffer err = new StringBuffer();
StringTokenizer strToken = new StringTokenizer(onlyDate, "-");
if (strToken.countTokens() != 3)
{
err.append("格式非法,日期部分的格式应该为“yyyy-MM-dd”!");
return err.toString();
}
else
{
String inputYear = strToken.nextToken();
String inputMonth = strToken.nextToken();
String inputDate = strToken.nextToken();
if (1 > Integer.parseInt(inputMonth) || Integer.parseInt(inputMonth) > 12)
{
err.append("月份必须在1至12之间!");
return err.toString();
}
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Integer.parseInt(inputYear), (Integer.parseInt(inputMonth) - 1), 1);
if ( (cal.getActualMaximum(cal.DAY_OF_MONTH)) < Integer.parseInt(inputDate) || (Integer.parseInt(inputDate) < 0))
{
err.append("日期必须在1至");
err.append(cal.getActualMaximum(cal.DAY_OF_MONTH));
err.append("之间!");
return err.toString();
}
}
return "";

}
回复
边城狂人 2004-10-15
如果用 SimpleDateFormat 也可以判断,如
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String s1 = "2004-10-32";
String s2 = "2004-10-20";
Date d = format.parse(s1);
String s3 = format.format(d);
System.out.println(s1.equals(s3));
String s4 = format.format(format.parse(s2));
System.out.println(s2.equals(s4));

不过这样有缺点,就是有些人写月份的日期的时候喜欢不足2位在前面加0,有些人又不喜欢。这种情况就不好判断了。
比如 2004-09-3
回复
边城狂人 2004-10-15
SimpleDateFormat.parse 会把超出时间范围的时间转换成一个更往后的时间,比如
2004-10-32 会转换成 2004-11-1

你先把你取得的日期分解成年月日三个值,然后用下面这个方法就可以判断日期是否正确了。

public boolean isValidDate(int year, int month, int day) {
month = month - 1;
GregorianCalendar gc = new GregorianCalendar(year, month, day);
System.out.println(gc.get(Calendar.YEAR));
System.out.println(gc.get(Calendar.MONTH));
System.out.println(gc.get(Calendar.DAY_OF_MONTH));
return (gc.get(Calendar.YEAR) == year)
&& (gc.get(Calendar.MONTH) == month)
&& (gc.get(Calendar.DAY_OF_MONTH) == day);
}
回复
lukelan 2004-10-15
jsp里可以使用SimpleDateFormat.parse(String)把一个字符串转为日期类型
如果返回null则是无效的日期
回复
边城狂人 2004-10-15
日期是以字符串类型保存的吗?
回复
glfwyz 2004-10-15
楼上的,在js里怎么实现?自已写函数吗?还有闰月闰年什么的,不好写呀!
回复
wwwer1 2004-10-15
在jsp里面写java代码比较麻烦,在js里面实现吧
回复
ipv 2004-10-15
有啊
多的是
网上google一下
代码好多的
回复
erldy 2004-10-15
自己写一个好了,不过俺不会!呵呵……
关注中……
回复
glfwyz 2004-10-15
谢谢各位,我试试,马上结贴
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告