在javascript中怎么判断一个字符串如20030506是否值有效的日期

yezhizi 2003-08-25 09:39:06
在javascript中怎么判断一个字符串如20030506是否值有效的日期
...全文
132 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liq1979 2003-08-25
  • 打赏
  • 举报
回复
function IsDate(obj){//检测值是否为日期型
var tempdate=obj.value;
var count=tempdate.indexOf("-");
if(count<0){
obj.ErrorMessage="非法格式。(yyyy-mm-dd)";
return false;
}
var year=Number(tempdate.substring(0,count));
if(year<100 && year>30){
year=year+1900
}
else if(year<30 && year>=0){
year=year+2000
}
tempdate=tempdate.substring(count+1);
var count=tempdate.indexOf("-");
if(count<0){
obj.ErrorMessage="非法格式。(yyyy-mm-dd)";
return false;
}

var month=Number(tempdate.substring(0,count));
tempdate=tempdate.substring(count+1)
var day=Number(tempdate);
obj.value=year+"-"+month+"-"+day;
//alert(year+"-"+month+"-"+day);
if(year<1900 || year>2200){
obj.ErrorMessage="这不是个合法的日期,年份超出范围";
return false;
}
if(month<1 || month>12){
obj.ErrorMessage="这不是个合法的日期,月份超出范围";
return false;
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if(day<1 || day>31){
obj.ErrorMessage="这不是合法的日期,日子超出范围";
return false;
}
}
else{
if(day<1 || day>30){
obj.ErrorMessage="这不是合法的日期,日子超出范围";
return false;
}
if(month==2){
if(((year%4==0) || (year%400==0)) && (year%100!=0)){
if(day<1 || day>29){
obj.ErrorMessage="这不是合法的日期,日子超出范围";
return false;
}
}
else{
if(day<1 || day>28){
obj.ErrorMessage="这不是合法的日期,日子超出范围";
return false;
}
}
}
}


return true
}
wacle 2003-08-25
  • 打赏
  • 举报
回复
呵呵,很遗憾,客户端javascript里面需要自己写方法验证的。
dub 2003-08-25
  • 打赏
  • 举报
回复
楼上说的办法很多,大体是两类:
1、用javascript在客户端判断
2、在服务器端用类型转换,抛出转换例外则不是日期格式
yezhizi 2003-08-25
  • 打赏
  • 举报
回复
当然是简单的好了,在.cs里面
我可以用
System.Convert.ToDateTime(sDate);判断日期是否有效,sDate的格式是2003-08-06
我想在javascript中也应该有类似的方法
但不知道该怎么用
redfoxhuang 2003-08-25
  • 打赏
  • 举报
回复
......
你要简单的还是复杂的?
如果是简单的
try
{
转化成datetime类型
}
catch
{
提示错误
}
复杂的用楼上的
wacle 2003-08-25
  • 打赏
  • 举报
回复
楼上诸位的方法没有一个是正确的,因为都没有考虑到闰月的问题,还有每个月天数不同的问题.
edobnet 2003-08-25
  • 打赏
  • 举报
回复
<form method=POST name=add LANGUAGE=javascript onsubmit="return add_onsubmit(this)">
killerwc 2003-08-25
  • 打赏
  • 举报
回复
不好意思,我在日文系统下,中国字乱码,str是文本框客户端id
错误弹出错误信息,正确返回
wacle 2003-08-25
  • 打赏
  • 举报
回复
用正则表达式,不过判断起来应该挺复杂的,因为牵扯到闰月的问题,还有每个月份天数的问题.GZ.
edobnet 2003-08-25
  • 打赏
  • 举报
回复
使用
script language="JavaScript" src="../inc/check.js"></script>
<script LANGUAGE="javascript">
<!--
function add_onsubmit(add) {


if (!checkvalue(add.username,3,20,1+8+32,"用户名")) return false;
if (!checkvalue(add.xm,0,0,1,"姓名")) return false;
if (!checkvalue(add.sex,0,0,1,"性别")) return false;
if (!checkvalue(add.password,3,20,1+8+32,"密码")) return false;
if (document.add.password.value != document.add.repassword.value){
alert("两次密码不一样");return false;document.add.password.focus();}
if (!checkvalue(add.age,1,150,1+2+64,"年龄")) return false;
//if (!checkvalue(add.works,0,0,1,"职务")) return false;
//if (!checkvalue(add.tel,0,0,1,"电话")) return false;
//if (!checkvalue(add.office,0,0,1,"所在部门")) return false;
}
//-->
</SCRIPT>
edobnet 2003-08-25
  • 打赏
  • 举报
回复
给一个全套验证的吧,
function checkvalue(obj, low, up, mode, lable){
/*
Mode = 1 检测是否为空 2是否是数字 4是否整数
8是否是为数字、字母和_.-
16 自定义字符检测
32 长度检测
64 数字大小检测
128 日期
256 电子邮件
512 电话
*/
var temp,type;
var length, i, base, str;

str=getformvalue(obj);
if(str==null){
lenght=0;
str="";
}
else{
length = str.length
}
temp=""
if( mode % 2 >= 1 ){
if( str == "" ){
temp = temp + "“" + lable + "”" + "不能为空!" + "\n";
}
}

if( mode % 4 >= 2 ){
base = "0123456789."
for(i = 0;i<=length-1;i++)
if( base.indexOf(str.substring(i, i+1)) == -1 ){
temp = temp + "“" + lable + "”" + "必需是数字!" + "\n";
break;
}
}

if( mode % 8 >= 4 ){
base = "0123456789"
for(i = 0;i<=length-1;i++)
if( base.indexOf(str.substring(i, i+1)) == -1 ){
temp = temp + "“" + lable + "”" + "必需是整数!" + "\n";
break;
}
}

if( mode % 16 >= 8 ){
base = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789_-."
for(i = 0;i<=length-1;i++)
if( base.indexOf(str.substring(i, i+1)) == -1 ){
temp = temp + "“" + lable + "”" + "包含非法字符!它只能是字母、数字和“- _ .”。" + "\n";
break;
}
}

if( mode % 32 >= 16 ){
base = low.replace("[a-z]", "abcdefghijklmnopqrstuvwxyz")
base = base.replace("[a-z]", "abcdefghijklmnopqrstuvwxyz")
base = base.replace( "[0-9]", "0123456789")
for(i = 0;i<=length-1;i++)
if( base.indexOf(str.substring(i, i+1)) == -1 ){
temp = temp + "“" + lable + "”" + "包含非法字符!它只能是" + up + "。" + "\n";
break;
}
}

if( mode % 64 >= 32 ){
if( ! (length >= low && length <= up) ){
temp = temp + "“" + lable + "”" + "的长度必需在" + low + "到" + up + "之间!" + "\n";
}
}

if( mode % 128 >= 64 ){
if( ! (parseInt(str) >= parseInt(low) && parseInt(str) <= parseInt(up)) ){
temp = temp + "“" + lable + "”" + "必需在" + low + "到" + up + "之间!" + "\n";
}

}
if( mode % 256 >=128 ){
str = str;
var tempy=''; //year
var tempm=''; //month
var tempd=''; //date
var tempArray; //store the date
if(str.length<8 && str.length>10)
{
temp = temp + "“" + lable + "”" + "日期长度为8-10位!" + "\n";
}
tempArray = str.split('-'); //split the str by '-'
if (tempArray.length!=3)
{
temp = temp + "“" + lable + "”" + "日期格式不对!正确的应为(年-月-日)" + "\n";
}
if (tempArray[0].length==4)
{
tempy = tempArray[0];
tempm = tempArray[1];
tempd = tempArray[2];
}
else
{
temp = temp + "“" + lable + "”" + "日期格式不对!正确的应为(年-月-日)" + "\n";
}
var tstr = tempy + '/'+tempm + '/'+tempd+' 8:0:0';
var tempDate = new Date(tstr);
if (isNaN(tempDate)) temp = temp + "“" + lable + "”" + "无效的日期输入!" + "\n";
if (((tempDate.getUTCFullYear()).toString()==tempy) && (tempDate.getMonth()==eval(tempm+'-1')) && (tempDate.getDate()==eval(tempd)))
temp = temp;
else
{
temp = temp + "“" + lable + "”" + "无效的日期输入!" + "\n";
}
}
if( mode % 512 >= 256 ){
var atIndex = str.indexOf('@');
var dotIndex = str.indexOf('.', atIndex);
var flag = true;
theSub = str.substring(0, dotIndex+1)

if ((atIndex < 1)||(atIndex != str.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(str.length <= theSub.length))
{ temp = temp + "“" + lable + "”" + "不是电子邮件地址" + "\n"; }
}
if( mode % 1024 >= 512 ){
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){6,12})+$/;
if (!patrn.exec(str))
{ temp = temp + "“" + lable + "”" + "不是电话号码" + "\n"; }
}
if(temp!=""){
alert(temp);
type=(getformtype(obj));
if(type!="radio" && type!="checkbox"){
obj.focus();
}
return false;
}
return true;

}

function getformtype(obj){
var type;
type=obj.type;
if(typeof(type)=="undefined"){

type=obj[0].type;
}
return type;
}
function getformvalue(input){
//取表单域的值
var type,temp;
temp="";

type=getformtype(input);

switch(type){
case "radio": //单选框
n=input.length-1;

if(isNaN(n)==true){
if(input.checked == true){
temp = input.value;
}else{
temp = "";
}
}else{
for(i=0;i<=n;i++){
if(input[i].checked == true){
return(input[i].value);
}
}
break;
}
case "checkbox": //复选框
n=input.length-1;
if(isNaN(n)==true){
if(input.checked == true){
temp = input.value;
}else{
temp = "";
}
}else{
for(i=0;i<=n;i++){
if(input[i].checked == true){
if(temp!=""){
temp += ",";
}
temp += input[i].value;

}
}
}
return(temp);
break;

case "select-one" : //单选列表框
n=input.length-1;
for(i=0;i<=n;i++){
if(input.options[i].selected == true){
temp = input.options[i].value;
break;
}
}
return(temp);
break;
case "select-multiple": //多选列表框
n=input.length-1;
for(i=0;i<=n;i++){
if(input.options[i].selected == true){
if(temp!=""){
temp+=",";
}
temp+=input.options[i].value;
}
}
return(temp);
break;
default: //其它
return(input.value);
break;

}

return(input.value);

}
killerwc 2003-08-25
  • 打赏
  • 举报
回复
function strDate(str){
Txt=document.getElementById(str);
str=Txt.value;
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(reg);
if(r==null)
{
alert("ヌ・菠・ネキオトネユニレクス」。");
return false;
}
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();
if (newStr!=str)
{alert("ヌ・菠・ネキオトネユニレクス」。");
return false;
}
else
{
return true;
}
}
edobnet 2003-08-25
  • 打赏
  • 举报
回复
temp为空则日期正确,否则为出错信息,
str为日期字符串
edobnet 2003-08-25
  • 打赏
  • 举报
回复
str = str;
var tempy=''; //year
var tempm=''; //month
var tempd=''; //date
var tempArray; //store the date
if(str.length<8 && str.length>10)
{
temp = temp + "“" + lable + "”" + "日期长度为8-10位!" + "\n";
}
tempArray = str.split('-'); //split the str by '-'
if (tempArray.length!=3)
{
temp = temp + "“" + lable + "”" + "日期格式不对!正确的应为(年-月-日)" + "\n";
}
if (tempArray[0].length==4)
{
tempy = tempArray[0];
tempm = tempArray[1];
tempd = tempArray[2];
}
else
{
temp = temp + "“" + lable + "”" + "日期格式不对!正确的应为(年-月-日)" + "\n";
}
var tstr = tempy + '/'+tempm + '/'+tempd+' 8:0:0';
var tempDate = new Date(tstr);
if (isNaN(tempDate)) temp = temp + "“" + lable + "”" + "无效的日期输入!" + "\n";
if (((tempDate.getUTCFullYear()).toString()==tempy) && (tempDate.getMonth()==eval(tempm+'-1')) && (tempDate.getDate()==eval(tempd)))
temp = temp;
else
{
temp = temp + "“" + lable + "”" + "无效的日期输入!" + "\n";
}
Dragonraja 2003-08-25
  • 打赏
  • 举报
回复
小弟认为,可以对20030506中每一个字符都取出做判断,首先你要固定好格式2001-1-1或20010101等等,然后对相应的字符作限制。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧