<script language="javascript" type="text/javascript"> function DisplayTime() { var timeSum=document.getElementById("txtTimeSum").value; var startTime=document.getElementById("txtStaDate").value; var tStaDate=startTime.toString().split(/[-\s:]/); //字符串转时间 var nowTime=new Date(); for(var i=0;i<tStaDate.length;i++) { if (isNaN(tStaDate[i])) {//非数字 false nowTime=new Date(); document.getElementById("txtStaDate").innerText=setTime(nowTime,0); break; } else {//数字 true // nowTime=new Date(Date.apply(null, tStaDate)); nowTime= eval('new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a){ return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'); //火星文看不懂 // nowTime=new //Date(tStaDate[0],tStaDate[1]-1,tStaDate[2],tStaDate[3],tStaDate[4],tStaDate[5]); } } document.getElementById("txtEndDate").innerText=setTime(nowTime,timeSum);
} function setTime(nowTime,timeSum) { var timget=nowTime.getTime(); var endTime=timget+(60*60*1000*(timeSum)); var gEndTime= new Date(endTime); var tYear=gEndTime.getYear(); var tMonth=gEndTime.getMonth()+1; var tDay=gEndTime.getDate(); var tHour=gEndTime.getHours(); var tMinutes=gEndTime.getMinutes(); var tSencond=gEndTime.getSeconds(); var clock =tYear+"-"; if (tMonth<10) clock += '0'; //字符串 clock += tMonth+'-'; if (tDay<10) clock += '0'; //字符串 clock += tDay+' ';
if (tHour<10) clock += '0'; //字符串 clock += tHour+':'; if (tMinutes<10) clock += '0'; //字符串 clock += tMinutes+':'; if (tSencond<10) clock += '0'; //字符串 clock += tSencond; return clock; } </script>
<td>开始时间<span class="spanARed">*</span></td> <td><asp:TextBox ID="txtStaDate" MaxLength="20" CssClass="TextBoxB" runat="server" onblur="DisplayTime()" /></td> <td>结束时间<span class="spanARed">*</span></td> <td> <asp:TextBox ID="txtEndDate" MaxLength="20" CssClass="TextBoxB" runat="server"> </asp:TextBox></td> <td>项目用时<span class="spanARed">*</span></td> <td><asp:TextBox ID="txtTimeSum" MaxLength="5" CssClass="TextBoxB" Style="width: 220px;" onblur="DisplayTime()" runat="server"></asp:TextBox>小时</td> |
Debugger调试结果已经分析
nowTime= eval('new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a){ return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'); 来看看这段关键代码(火星文哦~~),我来分割下: startTime.toString() .replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }) .match(/\d+/g)
已知: startTime="2009-10-16 10:37:48"; nowTime={new(Fri Oct 16 10:37:48 UTC+0800 2009)};
调试的结果: startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; })="2009-9-16 10:37:48";
startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g)={"2009","9","16","10","37","48",16,"2009-9-16 10:37:48",18} //后三位index 、input 、lastIndex
'new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'="new Date(2009,9,16,10,37,48)";
|
必备知识:
“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。
“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
下面,就让我们来看一下正则表达式元字符的具体应用。
/fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的“fool”, “fo”, 或者“football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
/eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的“easy”, “ego”, 或者“egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
/Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的“Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
较为常用的定位符包括:“^”, “$”, “\b”以及“\B”。
“^”定位符规定匹配模式必须出现在目标字符串的开头
“$”定位符规定匹配模式必须出现在目标对象的结尾
“\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一
“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。
/^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以“hell”, “hello”或“hellhound”开头的字符串相匹配。
/ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以“car”, “bar”或“ar”结尾的字符串相匹配。
/\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以“bomb”, 或“bom”开头的字符串相匹配。
/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以“human”, “woman”或“man”结尾的字符串相匹配。