帮帮忙,一个JavaScript的基本问题!
关于正则的问题
html完整原代码是这样
<HTML>
<HEAD>
<TITLE> 时间日期间隔:在线计算两个日期之间的,两个时间之间的时间间隔。钟表计时差。 </TITLE>
<meta name= "description " content= "物理教学计算工具 ">
<META http-equiv=Content-Type content= "text/html; charset=gb2312 ">
<STYLE type=text/css >
BODY {
MARGIN-回到页首: 0px; FONT-SIZE: 14px; MARGIN-LEFT: 10px; FONT-FAMILY: Verdana
}
A:link {
COLOR: #3737c8;TEXT-DECORATION: none
}
A:visited {
COLOR:#3737c8;TEXT-DECORATION: none
}
A:active {
COLOR: green;TEXT-DECORATION: none
}
A:hover {
COLOR: red; TEXT-DECORATION: underline
}
.stitle {
FONT-SIZE: 12px;
LINE-HEIGHT: 120%;
height: 25px;
}
.mbody {
FONT-SIZE: 12px; LINE-HEIGHT: 150%
}
.sbody {
FONT-SIZE: 12px; LINE-HEIGHT: 100%
}
.nwes {
LINE-HEIGHT: 150%;
}
.hr {
COLOR: #666666; BORDER-BOTTOM: #dfdfdf 1px solid
}
td {
font-size: 12px;
height:25px;
}
</STYLE>
</HEAD>
<BODY topmargin= "0 " onload= "d() ">
<p>
</p>
<p>
</p>
<p>
</p>
<p>
</p>
<TABLE width=750 height= "468 "
border=0 align=center cellPadding=0 cellSpacing=0 class=mbody>
<TBODY>
<TR>
<TD width= "619 " rowspan= "0 " vAlign=top> <p> <strong> 日期间隔时间差计算: </strong> 输入两个日期(包括时间),将会计算出两个日期间相差的周数、天数、小时数、分钟数和秒数,其中秒可以不填,为了方便纯粹计算日期,默认输入时间。你可以修改时间输入框中的时间为你需要的时间格式。 </p>
<SCRIPT LANGUAGE= "JavaScript ">
function isValidDate(dateStr) {
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
var matchArray = dateStr.match(datePat);
if (matchArray == null) {
alert(dateStr + " 日期格式不正确. ")
return false;
}
month = matchArray[1];
day = matchArray[3];
year = matchArray[4];
if (month < 1 || month > 12) {
alert( "月必须在01和12之间. ");
return false;
}
if (day < 1 || day > 31) {
alert( "日必须在01到31之间. ");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert( "月份 "+month+ " 没有31天! ")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day> 29 || (day==29 && !isleap)) {
alert( "二月 " + year + " 没有 " + day + " 天! ");
return false;
}
}
return true;
}
function isValidTime(timeStr) {
var timePat = /^(\d{1,2}):(\d{1,2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
var matchArray = timeStr.match(timePat);
if (matchArray == null) {
alert( "时间格式不正确. ");
return false;
}
hour = matchArray[1];
minute = matchArray[2];
second = matchArray[4];
ampm = matchArray[6];
if (second== " ") { second = null; }
if (ampm== " ") { ampm = null }
if (hour < 0 || hour > 23) {
alert( "小时必须在01到12之间. (或者00到23之间) ");
return false;
}
if (hour <= 12 && ampm == null) {
if (confirm( "Please indicate which time format you are using. OK = Standard Time, CANCEL = Military Time ")) {
alert( "You must specify AM or PM. ");
return false;
}
}
if (hour > 12 && ampm != null) {
alert( "You can 't specify AM or PM for military time. ");
return false;
}
if (minute < 0 || minute > 59) {
alert ( "Minute must be between 0 and 59. ");
return false;
}
if (second != null && (second < 0 || second > 59)) {
alert ( "秒必须在00到59之间. ");
return false;
}
return true;
}
function dateDiff(dateform) {
date1 = new Date();
date2 = new Date();
diff = new Date();
if (isValidDate(dateform.firstdate.value) && isValidTime(dateform.firsttime.value)) { // Validates first date
date1temp = new Date(dateform.firstdate.value + " " + dateform.firsttime.value);
date1.setTime(date1temp.getTime());
}
else return false; // otherwise exits
if (isValidDate(dateform.seconddate.value) && isValidTime(dateform.secondtime.value)) { // Validates second date
date2temp = new Date(dateform.seconddate.value + " " + dateform.secondtime.value);
date2.setTime(date2temp.getTime());
}
else return false; // otherwise exits
// sets difference date to difference of first date and second date
diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
timediff = diff.getTime();
weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
timediff -= weeks * (1000 * 60 * 60 * 24 * 7);
days = Math.floor(timediff / (1000 * 60 * 60 * 24));
timediff -= days * (1000 * 60 * 60 * 24);
hours = Math.floor(timediff / (1000 * 60 * 60));
timediff -= hours * (1000 * 60 * 60);
mins = Math.floor(timediff / (1000 * 60));
timediff -= mins * (1000 * 60);
secs = Math.floor(timediff / 1000);
timediff -= secs * 1000;
days=days+weeks*7;
dateform.difference.value =days + " 天, " + hours + " 时, " + mins + " 分, and " + secs + " 秒 ";
return false; // form should never submit, returns false
}
// End -->
</script>
<center> <form onSubmit= "return dateDiff(this); ">
<table bgcolor= "#F8F8F8 ">
<tr> <td width= "612 ">
<pre>
第一个日期: <input type=text name=firstdate value= " " size=10 maxlength=10> (格式:08/09/1999 表示1999年8月9日)
时间: <input type=text name=firsttime value= "08:09:10 " size=20 maxlength=20> (格式:08:04:05Am 表示上午8点04分05秒,下午为pm.也可18:04:05)
第二个日期: <input type=text name=seconddate value= " " size=10 maxlength=10> (格式:08/09/2005 表示1999年8月9日)
时间: <input type=text name=secondtime value= "08:09:10 " size=20 maxlength=20> (格式:08:04:05Am 表示上午8点04分05秒,下午为pm.也可18:04:05)
<center> <input type=submit value= "计算差别 ">
计算日期时间的差为: <br>
<input type=text name=difference value= " " size=60>
</center>
</pre>
</td> </tr>
</table>
</form>
</center>
</TR>
</TBODY> </TABLE>
<HR align=center width=750 color=#cccccc noShade SIZE=1>
<TABLE width=730 border=0 align=center class=sbody>
<TBODY>
<TR>
<TD> <FONT color=#999999> </FONT> </TD>
<TD align=right> <FONT color=#999999> </font> </TD>
</TR>
</TBODY>
</TABLE>
<SCRIPT>
</script>
</BODY> </HTML>
我想变成这样的输入格式:
第一个日期: 2007 //表示年
时间: 3.25.18 //表示3月25日18点
第二个日期: 2007 //表示年
时间:12.1.1 //表示12月1日1点
功能一样,请问应该怎么改,谢谢您.QQ47212184 不胜感激
[解决办法]
在页面上按照你的想法设计输入文本框,4个text。
然后在提交的检查函数中使用js的match方法精确匹配,检查输入的格式。
然后转换为时间和日期。
年份自然好转换。
时间使用split函数用.来分隔得到月/日/小时。
不是很难的。
js的正则表达式和Perl的几乎一样。
例如;str.match(/^\d{4}$/)
str.match(/^\d{1,2}\.\d{1,2}\.\d{1,2}$/);
呵呵。