我的取值不正确,好像是下面这段代码的缘故。function   formatPNum(n)   { 
var   re   =   /(\d+)(\.(\d+))?/;   re.exec(n   +   ""); 
var   s1   =   RegExp.$1,   s2   =   RegExp.$2,   s3   =   RegExp.$3,   nlast; 
if   (s2)   { 
if   (s3.length   >   2)   { 
s3   =   parseInt(s3.substr(0,   3)); 
nlast   =   parseInt((s3   +   "").substr(2,   1)); 
s3   =   (((nlast   >   4)   ?   (s3   +   10)   :   s3)   +   "").substr(0,   2); 
} n   =   s1   +   "."   +   s3; 

return   n; 
} 菜农大叔,这个取值是怎么定义的?我想调用时间时选定任一当月的一天即指定为当月,现在算出来的时间好像时选定的日期到下个月当天累加的。

解决方案 »

  1.   

    1.   /(\d+)(\.(\d+))?/ 
    这个正则表达式匹配的是:1个或多个数字后面跟0个或多个除换行回车之类的行终止符外的任意其他字符,后面再跟1个或多个数字。 
    2、s1保存的是第一个()对中匹配的结果,即前面的1个或多个数字。 
    s2保存的是第二个()对中匹配的结果,即后面的0个或多个其他字符加1个或多个数字。 
    s3保存的是第三个()对中匹配的结果。即后面的1个或多个数字。 
    3、后面的逻辑:
       如果s2不为空,当s3是3位以上的数字时,判断s3的最后1位是否大于4,大于4时,s3加10,取s3的前两位,返回s1点s3的前两位。
       如果s3为一位或两位述,返回s1点s3.
       如果s2为空,返回空。
      

  2.   

    需求是用JS来调取网站(PHP)里的员工工作时间。时间是分“周(weekly)”、“月(month)”和“季度(quarter)”划分,以前做的是周的,现在想改成按月的,但是做完发现取值有问题。
      

  3.   

    那个formatPNum传进去的是什么值?
      

  4.   

    或者把调用formatPNum相关的代码传上来看看。
      

  5.   

    嗯,我估计就是服务器XML里的工作时间,我合计是不是大叔写的日期算法里应该定义只要指定当月任何一天即为当月呢function processTables() { var x = false;

    for(var i=0; i<aSelectedUsers.length;i++){
            if(aSelectedUsers[i].stable==""){
                setTimeout(processTables,1000);
                break;
                   }       
        }    

    if (i == aSelectedUsers.length) x = true;

    if(x){       
            var oMain = document.getElementById("main");       
            var oNewDiv,oStable;       
            var oFinalTable = document.createElement("table");       
            var oNewFinalTableRow = oFinalTable.insertRow();       
            var oNewFinalTableCell = oNewFinalTableRow.insertCell();       
            oNewFinalTableCell.innerHTML="<strong>Name</strong>";       
            var aFirstWeekDay = [],xDay = getFirstDay(oSTDate.date);       
            aFirstWeekDay.push(xDay);       
            while(xDay<getFirstDay(oENDate.date)){       
                xDay = getNextFirstDay(xDay);       
                aFirstWeekDay.push(xDay);       
            }   

    var nCols = aFirstWeekDay.length + 1;       
            var sTY   =  sTM  = sTD = "";   
    var   months = ["January","Febrary","March","April","May","June","July","August","September","October","November","December"];  
            for(i =0;i<nCols - 1;i++){       
                oNewFinalTableCell=oNewFinalTableRow.insertCell();       
                oNewFinalTableCell.align  =  "right";       
                sTY  = aFirstWeekDay[i].getYear();       
                sTM  = months[aFirstWeekDay[i].getMonth()]; 
                sTD  = aFirstWeekDay[i].getDate();       
                sTD  = sTD <10 ?("0"+sTD):sTD;       
                oNewFinalTableCell.innerHTML = "<strong>" + sTM + "</strong>";       
            } //alert(oFinalTable.outerHTML);

    var s = "";
    for (var n = 0; n < aSelectedUsers.length; n++) {
    s += aSelectedUsers[n].stable;

    if (aSelectedUsers[n].stable != "no time for this user found") {
    oNewDiv = document.createElement("div");
    document.body.appendChild(oNewDiv);

    oNewDiv.innerHTML = aSelectedUsers[n].stable;
    oStable = oNewDiv.getElementsByTagName("TABLE")[0];

    oNewFinalTableRow = oFinalTable.insertRow();
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.innerHTML = aSelectedUsers[n].username;

    var nNonRows = [
    {string : "Operations", row : 0},
    {string : "Non-task Tracking", row : 0}
    ];

    for (i = 0; i < nNonRows.length; i++) {
    for (var m = 1; m < oStable.rows.length - 1; m++)
    if (oStable.rows[m].cells[0].innerText == nNonRows[i].string) {
    nNonRows[i].row = m;
    break;
    }
    }

    var nInnerText = nTotalNonHrs = 0;

    outer1:
    for (i = 1; i < nCols; i++) {
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.align = "right";

    for (m = 1; m < oStable.rows[0].cells.length - 1; m++){
    if (oStable.rows[0].cells[m].innerText == oFinalTable.rows[0].cells[i].innerText) {

    nInnerText = parseFloat(oStable.rows[oStable.rows.length -1].cells[m].innerText);

    for (var p = 0; p < nNonRows.length; p++) {
    if (nNonRows[p].row != 0)
    nTotalNonHrs += parseFloat(oStable.rows[nNonRows[p].row].cells[m].innerText);
    }

    oNewFinalTableCell.innerText = formatPNum(nTotalNonHrs/ 40 * 100);

    nTotalNonHrs = 0;

    continue outer1;

    } else {
    oNewFinalTableCell.innerHTML = 0;
    }

    }
    }


    document.body.removeChild(oNewDiv);

    } else {

    oNewFinalTableRow = oFinalTable.insertRow();
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.innerHTML = aSelectedUsers[n].username;


    for (i = 0; i < nCols - 1; i++) {
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.align = "right";
    oNewFinalTableCell.innerHTML = 0;
    }

    }

    }



    oMain.innerHTML = oFinalTable.outerHTML;

    if (document.getElementById("loader"))
    document.body.removeChild(document.getElementById("loader"));
    }

    }
    红色那个地方。。
      

  6.   

    看不出什么,不知道你的Xml返回的是什么,在formatPNum里加个alert调试一下,看输入和输出是不是你想要的东西。
      

  7.   


    function setContentHeight(){
    return document.documentElement.clientHeight - document.getElementById("main").offsetTop - 20;
    }
    var fso = new ActiveXObject("Scripting.FileSystemObject");function STENDate() {
    this.init = function (sY, sM, sD) {
    this.year = sY;
    this.month = sM;
    this.day = sD;
    this.date = new Date(sY, sM - 1, sD);
    }
    }var oSTDate = new STENDate(), oENDate = new STENDate();
    var moneday = 1000 * 60 * 60 * 24;
    function loadXMLDoc(i){ if (window.XMLHttpRequest){
    try { aSelectedUsers[i].req = new XMLHttpRequest(); } catch(e) { aSelectedUsers[i].req = false; }

    } else if (window.ActiveXObject){
    try { aSelectedUsers[i].req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {
    try { aSelectedUsers[i].req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { aSelectedUsers[i].req = false; }
    }
    }

    if (aSelectedUsers[i].req){
    createLoader();
    aSelectedUsers[i].req.onreadystatechange = function () { processReqChange(i); };
    aSelectedUsers[i].req.open("POST", aSelectedUsers[i].url);
    aSelectedUsers[i].req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    var sUN = document.getElementById("username").value;
    var sPW = document.getElementById("password").value;

    aSelectedUsers[i].req.send("username=" + sUN + "&password=" + sPW + "&login=Login");
    }
    }function processReqChange(i){
    if (aSelectedUsers[i].req.readyState == 4 && aSelectedUsers[i].req.status == 200){

    var xmlDoc = aSelectedUsers[i].req.responseText;

    if (xmlDoc.indexOf("Please use your IBM Intranet identity to log in") != -1){

    loadXMLDoc(i);

    } else if (xmlDoc.indexOf('<table class="report">') != -1) {

    xmlDoc = xmlDoc.substr(xmlDoc.indexOf('<table class="report">'));
    aSelectedUsers[i].stable = xmlDoc.substring(0, xmlDoc.indexOf("</table>") + 8);

    } else {
    aSelectedUsers[i].stable = "no time for this user found";
    }

    if (i == aSelectedUsers.length -1 && document.getElementById("loader")){
    processTables();
    }
    }
    }
    XML是这个么,放在getfirstday上面来着
      

  8.   

    Q:所有帖子你都回,怎么不是专家级别?
    A:我一个种菜的,肯定不是专家。加上春节我才注册,更不是专家。
    你楼上贴出来的东东是AJAX获取XML的函数,xml是它返回的东东。从你给的代码看:它返回的是一段HTML。返回的结果既是它: var xmlDoc = aSelectedUsers[i].req.responseText;你应该从它开始跟踪,一步一步看是不是按照你的需要在处理。
      

  9.   

    唔,种菜的也有专家啊这个aSelectedUsers[i].req.responseText; ,就在大叔写的processtable里哇东西是传回来了,但是数值不对呢
      

  10.   

    传回来的数值不对,那就看看1、请求的参数对不对,2、服务器的处理对不对。另外,你这个代码有安全漏洞噢。不能够在ajax里提交用户名和密码啊。很容易就被黑了。
      

  11.   

    嘿嘿,没事儿啊,这个是hta独立程序,不是网页哦参数没问题啦,好像是算法的问题呢,取值跟大叔写的时间调用有关
      

  12.   

    我那个方法很简单,getFirstDay返回传入参数的日期当月第一天。
    getNextFirstDay返回传入参数的日期下月的第一天。
    看看能不能满足你的需要,不能你就按你的需要改改就行啦。
      

  13.   


    function STENDate() {
    this.init = function (sY, sM, sD) {
    this.year = sY;
    this.month = sM;
    this.day = sD;
    this.date = new Date(sY, sM - 1, sD);
    }
    }var oSTDate = new STENDate(), oENDate = new STENDate();
    var moneday = 1000 * 60 * 60 * 24;function loadXMLDoc(i){
    if (window.XMLHttpRequest){
    try { aSelectedUsers[i].req = new XMLHttpRequest(); } catch(e) { aSelectedUsers[i].req = false; }
    } else if (window.ActiveXObject){
    try { aSelectedUsers[i].req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {
    try { aSelectedUsers[i].req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { aSelectedUsers[i].req = false; }
    }
    }
    if (aSelectedUsers[i].req){
    createLoader();
    aSelectedUsers[i].req.onreadystatechange = function () { processReqChange(i); };
    aSelectedUsers[i].req.open("POST", aSelectedUsers[i].url);
    aSelectedUsers[i].req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    var sUN = document.getElementById("username").value;
    var sPW = document.getElementById("password").value;

    aSelectedUsers[i].req.send("username=" + sUN + "&password=" + sPW + "&login=Login");
    }
    }function processReqChange(i){
    if (aSelectedUsers[i].req.readyState == 4 && aSelectedUsers[i].req.status == 200){

    var xmlDoc = aSelectedUsers[i].req.responseText;

    if (xmlDoc.indexOf("Please use your IBM Intranet identity to log in") != -1){

    loadXMLDoc(i);

    } else if (xmlDoc.indexOf('<table class="report">') != -1) {

    xmlDoc = xmlDoc.substr(xmlDoc.indexOf('<table class="report">'));
    aSelectedUsers[i].stable = xmlDoc.substring(0, xmlDoc.indexOf("</table>") + 8);

    } else {
    aSelectedUsers[i].stable = "no time for this user found";
    }

    if (i == aSelectedUsers.length -1 && document.getElementById("loader")){
    processTables();
    }
    }
    }
    function getFirstDay(o){       
        return  (new Date(o.getYear(),o.getMonth(),1));       
    }      function getNextFirstDay(o){
    var   m = o.getMonth()+1; 
    var   y = o.getYear(); 
    if(m   > 11){ 
                m = 0;
                y++; 
        } 
    return (new Date(y,m,1));
    }var   months = ["January","Febrary","March","April","May","June","July","August","September","October","November","December"]; 
    function processTables() { var x = false;

    for(var i=0; i<aSelectedUsers.length;i++){
            if(aSelectedUsers[i].stable==""){
                setTimeout(processTables,1000);
                break;
                   }       
        }    

    if (i == aSelectedUsers.length) x = true;

    if(x){       
            var oMain = document.getElementById("main");       
            var oNewDiv,oStable;       
            var oFinalTable = document.createElement("table");       
            var oNewFinalTableRow = oFinalTable.insertRow();       
            var oNewFinalTableCell = oNewFinalTableRow.insertCell();       
            oNewFinalTableCell.innerHTML="<strong>Name</strong>";       
            var aFirstWeekDay = [],xDay = getFirstDay(oSTDate.date);       
            aFirstWeekDay.push(xDay);       
            while(xDay<getFirstDay(oENDate.date)){       
                xDay = getNextFirstDay(xDay);       
                aFirstWeekDay.push(xDay);       
            }  
    var nCols = aFirstWeekDay.length + 1;       
            var sTY   =  sTM  = sTD = "";   
            for(i =0;i<nCols - 1;i++){       
                oNewFinalTableCell=oNewFinalTableRow.insertCell();       
                oNewFinalTableCell.align  =  "right";       
                sTY  = aFirstWeekDay[i].getYear();       
                sTM  = months[aFirstWeekDay[i].getMonth()]; 
                sTD  = aFirstWeekDay[i].getDate();       
                sTD  = sTD <10 ?("0"+sTD):sTD;       
                oNewFinalTableCell.innerHTML = "<strong>" + sTM + "</strong>";       
            }
    var s = "";
    for (var n = 0; n < aSelectedUsers.length; n++) {
    s += aSelectedUsers[n].stable;

    if (aSelectedUsers[n].stable != "no time for this user found") {
    oNewDiv = document.createElement("div");
    document.body.appendChild(oNewDiv);

    oNewDiv.innerHTML = aSelectedUsers[n].stable;
    oStable = oNewDiv.getElementsByTagName("TABLE")[0];

    oNewFinalTableRow = oFinalTable.insertRow();
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.innerHTML = aSelectedUsers[n].username;

    var nNonRows = [
    {string : "Operations", row : 0},
    {string : "Non-task Tracking", row : 0}
    ];

    for (i = 0; i < nNonRows.length; i++) {
    for (var m = 1; m < oStable.rows.length - 1; m++)
    if (oStable.rows[m].cells[0].innerText == nNonRows[i].string) {
    nNonRows[i].row = m;
    break;
    }
    }

    var nInnerText = nTotalNonHrs = 0;

    outer1:
    for (i = 1; i < nCols; i++) {
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.align = "right";

    for (m = 1; m < oStable.rows[0].cells.length - 1; m++){
    if (oStable.rows[0].cells[m].innerText == oFinalTable.rows[0].cells[i].innerText) {

    nInnerText = parseFloat(oStable.rows[oStable.rows.length -1].cells[m].innerText);

    for (var p = 0; p < nNonRows.length; p++) {
    if (nNonRows[p].row != 0)
    nTotalNonHrs += parseFloat(oStable.rows[nNonRows[p].row].cells[m].innerText);
    }

    oNewFinalTableCell.innerText = formatPNum(nTotalNonHrs/ 40 * 100);

    nTotalNonHrs = 0;

    continue outer1;

    } else {
    oNewFinalTableCell.innerHTML = 0;
    }

    }
    }
    document.body.removeChild(oNewDiv);

    } else {

    oNewFinalTableRow = oFinalTable.insertRow();
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.innerHTML = aSelectedUsers[n].username;


    for (i = 0; i < nCols - 1; i++) {
    oNewFinalTableCell = oNewFinalTableRow.insertCell();
    oNewFinalTableCell.align = "right";
    oNewFinalTableCell.innerHTML = 0;
    }

    }

    }



    oMain.innerHTML = oFinalTable.outerHTML;

    if (document.getElementById("loader"))
    document.body.removeChild(document.getElementById("loader"));
    }

    }function formatPNum(n) {
    var re = /(\d+)(\.(\d+))?/; re.exec(n + "");
    var s1 = RegExp.$1, s2 = RegExp.$2, s3 = RegExp.$3, nlast;

    if (s2) {
    if (s3.length > 2) {
    s3 = parseInt(s3.substr(0, 3));
    nlast = parseInt((s3 + "").substr(2, 1));
    s3 = (((nlast > 4) ? (s3 + 10) : s3) + "").substr(0, 2);
    }

    n = s1 + "." + s3;
    }

    return n;
    }var aSelectedUsers = [];function startNow(){ aSelectedUsers.length = 0; var oSelect = document.getElementById("teammembers");
    var i = 0, sUserCode = "";


    if (aSelectedUsers.length != 0){

    for (i = 0; i < aSelectedUsers.length; i++) {
    sUserCode = aSelectedUsers[i].usercode;

    aSelectedUsers[i].url = 'http://task.pok.com/track/rep/user.php?fStmonth='+ 
    oSTDate.month + '&fStday='+ oSTDate.day + '&fStyear='+ oSTDate.year + 
    '&fEnmonth='+ oENDate.month + '&fEnday='+ oENDate.day + '&fEnyear='+ oENDate.year + 
    '&freq=month&fdUser=' + sUserCode + '&editmode=0&submit=Submit';

    loadXMLDoc(i);
    }

    }
    }function getFinalString() {
    var oMain = document.getElementById("main");
    var oTable = oMain.getElementsByTagName("TABLE")[0];

    var s = "", i = n = 0, oRow;

    for (i = 0; i < oTable.rows.length; i++) {
    oRow = oTable.rows[i];

    for (n = 0; n < oRow.cells.length; n++) {
    s += oRow.cells[n].innerText + ((n != oRow.cells.length - 1) ? "\t" : "");
    }

    if (i != oTable.rows.length - 1) s += "\r\n";
    }

    return s;
    }
    菜农大叔,求救.为什么我那个"opration"的字段为空呢,我明明没有取错呢,还有就是时间,取出来的时间还是不对呢.