在用到时间验证时,后台验证会浪费服务器资源,用户也会有等待,
因此想到用自定义验证控件,下面放入了一些经常用的时间运算
由于客户端验证控件不允许前台修改错误信息,所以用个td来代替。
为了防止空格和无内容时也会抖动,td在无错误时加入文字
同时,此例中的送花日期TextBox6用到了梅花雪的日历控件。
因为日期型数据默认读取的日期为yyyy-M-d型,梅花雪控件日期形式为yyyy-MM-dd型,所以都需要转换为yyyy-MM-dd型
compearday中的compdt3为后台设置的订单支持上限日期
<SCRIPT language="JavaScript">
<!--
function compearday(source,value)
{
var compdt1 = new Date();
compdt1=document.getElementById("TextBox6").value;
var year = new Date().getYear();
var month = new Date().getMonth()+1;
var day = new Date().getDate();
if(month<10)month="0"+month;
if(day<10)day="0"+day;
var compdt2 = year+'-'+month+'-'+day;//今天
//execScript('monthafter = DateAdd("M", 1, date())','vbscript'); //一个月后今天//得到的是UTC日期格式
//var s=new Date(monthafter);
//function appendZero(s){return ("00"+s).substr((""+s).length);}
//var compdt3 = s.getFullYear() + "-" + appendZero(s.getMonth()+1) + "-" + appendZero(s.getDate());//转换格式yyyy-MM-dd
var compdt3 = new Date();//天数上限日期
compdt3=document.getElementById("texth").value;
if(compdt1<compdt2||compdt1>compdt3)//小于今天或者大于上限日期
value.IsValid = false;
else
value.IsValid = true;
}
//-->
function compeartime(source,value)
{
var compdt1;
compdt1=document.getElementsByName("RadioButtonList2");
for(i=0;i<compdt1.length;i++)
{
if(eval('document.all.RadioButtonList2_' + i).checked)
{
var str;
var now=new Date();
var s=new Date(now);
function appendZero(s)
{
return ("00"+s).substr((""+s).length);
}
//var compdt2 = s.getFullYear() + "年" + appendZero(s.getMonth()+1) + "月" + appendZero(s.getDate()) + "日 " + appendZero(s.getHours()) + ":" + appendZero(s.getMinutes()) + ":" + appendZero(s.getSeconds());
var compdt2 = new Date().getYear() + "年" + (new Date().getMonth()+1) + "月" + new Date().getDate() + "日 " + appendZero(s.getHours()) + ":" + appendZero(s.getMinutes()) + ":" + appendZero(s.getSeconds());
//var compdt3 = s.getFullYear() + "年" + appendZero(s.getMonth()+1) + "月" + appendZero(s.getDate()) + "日 "
var compdt3 = new Date().getYear() + "年" + (new Date().getMonth()+1) + "月" + new Date().getDate() + "日 "
var compdt4 = s.getFullYear() + "-" + appendZero(s.getMonth()+1) + "-" + appendZero(s.getDate());//今天
var compdt5 = document.getElementById("TextBox6").value;
if(compdt4==compdt5)//如果选择的是今天送花
{
if(AddHours(3)>(compdt3 +"21:00:00"))//现在时间+3小时大于今天的21点
{
value.IsValid = false;
str='<font color=red>今天已经不够时间准备,请下明天的订单!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
if(compdt2>compdt3 + eval('document.all.RadioButtonList2_' + i).value)//现在时间大于选择的时间,时间出错
{
value.IsValid = false;
str='<font color=red>送花时间出错!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
if(AddHours(3)>compdt3 + eval('document.all.RadioButtonList2_' + i).value)//现在时间3小时后大于选择的时间,来不及准备
{
value.IsValid = false;
str='<font color=red>时间来不及准备,请选择下一个时间段!</font>';
td1.innerHTML=str;
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
}
}
}
}
else
{
value.IsValid = true;
str="市区必须提前3小时下单,节假日除外";
td1.innerHTML=str;
}
}
}return false;
}
function AddHours(hourvalue) //现在时间+N=N几小时后时间
{
HoursToAdd=hourvalue;
var newdate=new Date();
var newtimems=newdate.getTime()+(HoursToAdd*60*60*1000);
newdate.setTime(newtimems);
return newdate.toLocaleString();
}
</script>
<tr bgColor="#ffffff">
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
align="right" width="30%" height="30"><input type="hidden" runat="server" id="texth" style="WIDTH: 32px; HEIGHT: 22px" size="1">要求<font color="red">送花时间</font>:
</td>
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 20px; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
width="70%" colSpan="2" height="30"><asp:textbox id="TextBox6" onfocus="calendar()" runat="server"></asp:textbox> <FONT color="#ff0000">**
<asp:requiredfieldvalidator id="RequiredFieldValidator5" runat="server" ErrorMessage="必填" ControlToValidate="TextBox6"></asp:requiredfieldvalidator><asp:customvalidator id="CustomValidator1" runat="server" ControlToValidate="TextBox6" ClientValidationFunction="compearday"></asp:customvalidator></FONT></td>
</tr>
<tr bgColor="#ffffff">
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
align="right" width="30%" height="30">如有特殊要求或不在上述时间段请电话联系本公司<asp:customvalidator id="Customvalidator3" runat="server" ClientValidationFunction="compeartime" ControlToValidate="RadioButtonList2"></asp:customvalidator></td>
<td class="table-xia" style="BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid"
width="70%" colSpan="2" height="30">
<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<TBODY>
<tr>
<td><asp:radiobuttonlist id="RadioButtonList2" runat="server" RepeatDirection="Horizontal" RepeatColumns="6">
<asp:ListItem Value="10:00:00">8:00-10:00</asp:ListItem>
<asp:ListItem Value="13:00:00">10:00-13:00</asp:ListItem>
<asp:ListItem Value="18:00:00">14:00-18:00</asp:ListItem>
<asp:ListItem Value="21:00:00" Selected="True">21:00前</asp:ListItem>
</asp:radiobuttonlist></td>
</tr>
<TR>
<td id="td1" height="16">市区必须提前3小时下单,节假日除外</td>
</TR>
</TBODY>
</table>
</td>
</tr>