在用到時間驗證時,後台驗證會浪費伺服器資源,使用者也會有等待,
因此想到用自訂驗證控制項,下面放入了一些經常用的時間運算
由於用戶端驗證控制項不允許前台修改錯誤資訊,所以用個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>