我同事出了道難題給我,求求這裡的高手們幫幫忙!因為一些原因,我們的系統強迫我們只能前端作業,
所以需要JS的幫忙。大致的需求如下:
一個函式      輸入為兩個時間字串"2009-10-20 07:00","2009-11-15 20:00"要想辦法算出相差的日數、小時數、分鐘數就像       請假"6日5小時45分鐘"//到這裡都還好但是中間要扣掉上班時間以外的時數,這好難!包含上下班設定、及周六日判定;以下是我目前實驗的進度:<script language="JavaScript">
alert("!!!");
function date_Validation(date1, date2) {
    alert("!!!");alert(new date());
    comptime(pTS(date1),"09:00")!=-1)alert("早於上班時間~~~~");
    if(comptime(pTS(date2),"18:30")!=1)alert("晚於~~~~~~~");
    return "";
}function comptime(a, b) {
    alert("!!!");
    var dateA = new Date("1900/1/1   " + a);
    var dateB = new Date("1900/1/1   " + b);
    if (isNaN(dateA) || isNaN(dateB)) return null;
    if (dateA > dateB) return 1;
    if (dateA < dateB) return -1;
    return 0;
}
//pTS => processTimeString
function pTS(date) {
    var TIME1 = date.substr(11, 5);
    alert(TIME1);
return TIME1;
}
function processDateString(date) { 
    var Date1 = date.substr(0,10);
}
var str = date_Validation("2008-10-09 08:30", "2008-10-20 19:00"); </script>
<script language="JavaScript">
<!--  
function date_Validation(date1, date2) {
    //alert("!!!");
    //alert(date1+date2);
    var idays,aYear,aMonth,aDay,bYear,bMonth,bDay;
    aYear = date1.substr(0,4);
    aMonth = date1.substr(5,2);
    aDay = date1.substr(8,2);
    aHour = date1.substr(11,2);
    aMin = date1.substr(14,2);
    bYear = date2.substr(0,4);
    bMonth = date2.substr(5,2);
    bDay = date2.substr(8,2);
    bHour = date2.substr(11,2);
    bMin = date2.substr(14,2);
    var dt1 = new Date(aYear,aMonth-1,aDay,aHour,aMin);
    var dt2 = new Date(bYear,bMonth-1,bDay,bHour,bMin);
    var dt3 = dt2;
    var dc1 = Math.round(((dt2-dt1)/86400000));
    var dc2 = dt2-dt1;
    var dayCount = 0;
    alert(dt2);
    alert(dc1);
    alert(dc2.getDay());
    alert(dt3.toString());
   while(dc1>0)
    {
      
      
      dayCount = dayCount + 1;
      dc1 = dc1 - 1;
    }
     alert(dayCount);
/*******************************************************
    while(dc2>=86400000)
    {
       if   (dt3.getDay()==0 || dt3.getDay()==6)
       {
          dc2 -= 86400000;
       }
       else
       {
          dc2 -= 86400000;
          datCount += 1;
       }  
    }
    
    var Int_aDay,Int_bDay;
    Int_aDay = parseInt(aMonth+aDay,10); 
    Int_bDay = parseInt(bMonth+bDay,10);
    //alert(Int_aDay+Int_bDay);
  var   dt   =   new   Date(); 
  alert(dt.getDay());  
  if   (dt.getDay()==0 || dt.getDay()==6)   
      //if(Int_bDay>Int_aDay)
   
***********************************************************/    
    return "";
}var str = date_Validation("2008-03-01 08:30", "2008-05-09 19:00"); 
//-->
</script>

解决方案 »

  1.   

    已經成功了,不過我真的心情很差!
       
       一改再改
    MSNStatus "逼勒~一直改~  我要一個浮點數日期計算->要算成N日N時N分->分三個資料欄位->.......";
      永遠寫不完,老闆回到辦公室,一定會問我:[怎嚜那嚜慢!]
         我真想補我旁邊那個人一刀!
      正常的溝通方式不是應該先真誠的感謝,然後想清楚要什麼再提出改進嗎?
      
    牢騷發完自PO答案(時間的部份沒有帶回來):
      
      <html>
    <head>
    <script language="JavaScript">
    <!--  function compdate(st1,ed1){
            alert("!!!"); 
            var st,ed,aaa,bbb,st2;
            aaa = st1.split("-");//alert(aaa);
            bbb = ed1.split("-");//alert(bbb);
            st = new Date(aaa[0],(aaa[1]-1),aaa[2],"00","00","00");  //alert(st);
            ed = new Date(bbb[0],(bbb[1]-1),bbb[2],"00","00","00");  //alert(ed);    
            var tmp   =   86400000;     
            var   days   =   Math.round((ed.getTime()   -   st.getTime())/tmp);alert(days);   //相隔的天数   
            var   workDays=   0;//工作日   
            var   holiday   =   new   Array("10-21","10-03","10-02"); //alert(holiday);//自行添加假日
            var    uuu =    new   Array("日","一","二","三","四","五","六");
            for(var   i   =1;i<=days;i++)   
            {
                  //alert(i);
                  st2 =new Date();   
                  st2.setTime(st.getTime()+tmp*i);   //   i   天以后的日期     
                  //alert(st2);
                  alert(uuu[st2.getDay()]);
                  if(st2.getDay()!=0   &&   st2.getDay()!=6)   //不是周六、周日   
                  {   
                      
                      var   str   =   (st2.getMonth()+1)+"-"+st.getDate();   
                      if(holiday.toString().indexOf(str)   <   0)   //不是自定义的假日   
                          {   
                            //alert(str);
                            workDays++;   
                          }   
                  }   
              }
               alert(workDays);  
              return   workDays;//返回工作日
            
      }
     //http://www.w3schools.com/jS/tryit.asp?filename=tryjs_timing_clock   
      compdate("2009-10-15","2009-10-20");
    -->  
    </script>
    </head>
    <body>
    </body>
    </html>