需求输入两个时间,只需要HH:MM  即小时和分钟  
我是用<input type="text" name="starttime" /> <input type="text" name="stopname" />进行输入
例如输入 11:30         12:30 那么如何将这两个转换为时间格式做比较呢?百度了一堆都是天与天之间比较的
下面是我模仿着写的JS,转换时间那里肯定是有问题的,要如何改写呢?
function comparetime(){
var starttime = document.getElementById("starttime").value;
var stoptime = document.getElementById("stoptime").value;
var time1=(starttime).toTimeString(); //应该是这里处理的方法有问题
var time2=(stoptime).toTimeString();if(starttime > stoptime){
alert("输入的时间有误");
}
else {
alert("正确");
}
}
还有一个问题是,我的数据库里有一个字段searchtime 字段类型为datetime,
我通过PHP页面对这个表进行update的操作,我想谁设定在这个searchtime+12小时之后,就不能通过PHP
页面进行update操作了  我知道加个判断就可以了,通过$searchtime=$row['$searchtime'] 获取时间也没问题,就是不知道
$searchtime如何加这12个小时,也是时间格式转换的问题

解决方案 »

  1.   

    可以这么写
    function comparetime(){
    var starttime = document.getElementById("starttime").value;
    var stoptime = document.getElementById("stoptime").value;
    var t1=starttime.split(':');
    var t2=stoptime.split(':');
    var time1=new   Date(75,   1,   16,   t1[0],   t1[1],   0);   
     var time2=new   Date(75,   1,   16,   t2[0],   t2[1],   0);if(starttime > stoptime){
        alert("输入的时间有误");
    }
    else {
        alert("正确");
    }}
    第二个问题没看懂
      

  2.   


    第一个能详细说明下date()里面的参数都是什么吗?谢谢第二个问题其实就是我有一个可以用来修改的php页面,
    现在是任意时间可以修改,我现在想加上一个时间的判断,如果在输入时间+12小时的范围内,正常执行修改的sql语句,超出时间范围则提示,不能进行修改
    我获得时间的方法使<input type="hidden" name="searchtime" value="<?php echo date(Ymd H:i:s) ?>" 
    这样的形式,在数据库中的字段类型是datetime 
    就是说我这个searchtime+12小时 这个应该怎么写希望这回表述的清楚
      

  3.   


    var t1=starttime.split(':');  //将时,分数据分割
    var t2=stoptime.split(':');
    var time1=new   Date(75,   1,   16,   t1[0],   t1[1],   0);   //年,月,日,时,分,秒
     var time2=new   Date(75,   1,   16,   t2[0],   t2[1],   0);这样的理解对吧?另外比较是不是应该用time1和time2啊?这样onsubmit问题吧?好像不起作用啊。。 谢谢
    <form name="form1" id="form1" action="" method="post" onSubmit="return comparetime();" >
    <input type="text" name="starttime" id="starttime"  />
    <input type="text" name="stoptime" id="stoptime" />
    <br><br>
    <input type="submit" value="确定" />
    </form>
      

  4.   

    另外比较是不是应该用time1和time2啊?
     是的,理解对了。我的写错了 2. 这个意思?
    if(strtotime($_POST['searchtime'])+12*3600<=strtotime($searchtime)){
         可以修改
    }else{
         不能修改
    }
      

  5.   

    1、s1 = '11:30';
    s2 = '12:30';d = new Date();
    t = s1.split(/:/);
    d.setHours(t[0], t[1]);
    t1 = d.getTime();t = s2.split(/:/);
    d.setHours(t[0], t[1]);
    t2 = d.getTime();if(t1 > t2) alert('ok');
    else alert('error');
    2、$searchtime = '2012-09-05 10:14:25';
    echo date('Y-m-d H:i:s', strtotime('12 Hours'. $searchtime));
    //2012-09-05 22:14:25 
      

  6.   

    恩,就是这个意思
    还有两个问题,
    第一执行alert()警告后,仍然做提交的操作,会将内容插入到数据库中去,JS部分如何处理。。
    第二个问题,我想把这个扩展一下,上回问过一个给table手动添加行的JS,是这样的
    JS部分
    <script type="text/javascript">
    var cGetRow=-99999;
    function insertrow(){
    var newrow = document.all.ACE_HIDDEN_TABLE.rows[0].cloneNode(true); //克隆一行
    document.all("newTB").appendChild(newrow); //添加刚才克隆的一行
    }
    function GetRow(obj){
    //获得行索引
    //两个parentElement分别是TD和TR,rowIndex是TR的属性
    //this.parentElement.parentElement.rowIndex
    //cGetRow=window.event.srcElement.parentElement.parentElement.rowIndex;
    cGetRow = obj.parentNode.parentNode.rowIndex;
    DelRow(cGetRow);//点击checkbox时,直接删除行。
    }
    function DelRow(iIndex){
    //删除一行
    if(iIndex==-99999){
    alert("系统提示:没有选中行号!");
    }else{
    document.getElementsByTagName('table')[10].deleteRow(iIndex);
    iIndex==-99999;//将rowIndex恢复默认值。
    }
    }
    </script>HTML部分  这里就不用管删除的部分了,没写checkbox那些
    <table width="100%" border="1">
    <thead>
      <tr>
    <td>出发时间</td>
    <td>结束时间</td>
      </tr>
     </thead>
     
     <tbody id="ACE_HIDDEN_TABLE" style="display:one">
       <tr>
       <td><input type="text" name="starttime[]" id="starttime"  /></td>
       <td><input type="text" name="stoptime[]" id="stoptime" /></td>
       </tr>
       </tbody>
        <tbody id="newTB">
      </tbody>
    </table><div align="center" style="margin-top:50px;margin-right:300px;">
    <input type="button" onClick="insertrow();" value="增加一行">
    </div>这种情况下,我想要每行都进行时间的比较,全部正确,才能够进行提交操作,这块要如何写
      

  7.   

    谢谢
    还有两个问题,
    第一执行alert()警告后,仍然做提交的操作,会将内容插入到数据库中去,JS部分如何处理。。
    第二个问题,我想把这个扩展一下,上回问过一个给table手动添加行的JS,是这样的
    JS部分
    <script type="text/javascript">
    var cGetRow=-99999;
    function insertrow(){
    var newrow = document.all.ACE_HIDDEN_TABLE.rows[0].cloneNode(true); //克隆一行
    document.all("newTB").appendChild(newrow); //添加刚才克隆的一行
    }
    function GetRow(obj){
    //获得行索引
    //两个parentElement分别是TD和TR,rowIndex是TR的属性
    //this.parentElement.parentElement.rowIndex
    //cGetRow=window.event.srcElement.parentElement.parentElement.rowIndex;
    cGetRow = obj.parentNode.parentNode.rowIndex;
    DelRow(cGetRow);//点击checkbox时,直接删除行。
    }
    function DelRow(iIndex){
    //删除一行
    if(iIndex==-99999){
    alert("系统提示:没有选中行号!");
    }else{
    document.getElementsByTagName('table')[10].deleteRow(iIndex);
    iIndex==-99999;//将rowIndex恢复默认值。
    }
    }
    </script>HTML部分  这里就不用管删除的部分了,没写checkbox那些
    <table width="100%" border="1">
    <thead>
      <tr>
    <td>出发时间</td>
    <td>结束时间</td>
      </tr>
     </thead>
     
     <tbody id="ACE_HIDDEN_TABLE" style="display:one">
       <tr>
       <td><input type="text" name="starttime[]" id="starttime"  /></td>
       <td><input type="text" name="stoptime[]" id="stoptime" /></td>
       </tr>
       </tbody>
        <tbody id="newTB">
      </tbody>
    </table><div align="center" style="margin-top:50px;margin-right:300px;">
    <input type="button" onClick="insertrow();" value="增加一行">
    </div>这种情况下,我想要每行都进行时间的比较,全部正确,才能够进行提交操作,这块要如何写
      

  8.   

    将你的函数改造一下,将starttime 和stoptime 当参数传进去。
    if(starttime > stoptime){
        alert("输入的时间有误");
        return false;  //阻止提交
    }然后循环每行imput 框 ,将每行 starttime 和 stoptime 的值传入函数进行验证
      

  9.   


    <script language="javaScript">
    function duibi(a,b){
    var c1=a.split(':');
    var starttime = new  Date(75,1,16,c1[0][],c1[1][],0);
    var startimes = starttime.getTime();

    var c2=b.split(':');
    var stoptime = new Date(75,1,16,c2[0][],c2[1][],0);
    var stoptimes = stoptime.getTimes();
    }if(starttimes >= stoptimes){
    alert("输入时间有误");
    return false;
    }
    else {
    return false;
    }
    </script>
    尝试着改写的函数  不知道对不对循环每行input框 传值? 能实例化吗? 看的不太明白。。
      

  10.   

    duibi 方法就不要alert了,直接返回false或 true就行了if(starttimes >= stoptimes){
        alert("输入时间有误");
        return false;
    }
    else {
        return true;
    }
    function setSubmit(){
           ...............这里验证ACE_HIDDEN_TABLE 下的两个input 框.................
            var inputs=document.getElementById('newTB').getElementsByTagName('input');         for(var i=0;i<inputs.length;i+=2){
                if(!duibi(inputs[i].value,inputs[i+1].value)){
                     alert('输入有误');
                     return false;
                }
           }
            return true;
    }然后在你的form中 <form .... onsubmt="return setSubmit()">