0

我在 javascript 文件中有以下代码。当我运行它时,我收到错误消息:

“找不到变量:addZero”。

function addZero(n) {
    return ( n < 0 || n > 9 ? "" : "0" ) + n;
}

Date.prototype.toISODate =
        new Function("with (this)\n    return " +
           "getFullYear()+'-'+ addZero(getMonth()+1)+ '-'" +
           "+ addZero(getDate()) + 'T' + addZero(getHours())+':' " +
           "+ addZero(getMinutes()) +':'+ addZero(getSeconds()) +'.000Z'");
4

4 回答 4

1
function addZero(n) {
    return ( n < 0 || n > 9 ? "" : "0" ) + n;
}

Date.prototype.toISODate = function() {
    // do what you want here
    // with real code! not strings...
}​
于 2012-05-01T10:26:32.170 回答
0

尝试像这样重写您的 Date 扩展,以保持清晰并避免使用with关键字

Date.prototype.toISODate =
  function(){

    function padLeft(nr,base,padStr){
        base = base || 10;
        padStr = padStr || '0';
        var  len = (String(base).length - String(nr).length)+1;
        return len > 0? new Array(len).join(padStr)+nr : nr;
    }    

    return [this.getFullYear(),
            '-',
            padLeft(this.getMonth()+1),
            '-',
            padLeft(this.getDate()),
            'T', 
            padLeft(this.getHours()),
            ':',
            padLeft(this.getMinutes()),
            ':',
            padLeft(this.getSeconds()),
            '.',
            padLeft(this.getMilliseconds(),100),
            'Z'].join('');
  };

padLeftZero函数现在存在于该方法的范围内Date.toISODate。为了清楚起见,使用数组文字来构建返回字符串。将new Function ...函数分配给Date.prototype.toISODate. 顺便说一句,毫秒被添加到结果中(用零填充)。

于 2012-05-01T11:18:02.290 回答
0

看起来你的报价已关闭。尝试

return "with (this)\n    return " +
getFullYear() + '-' + addZero(getMonth()+1) + '-' +
addZero(getDate()) + 'T' + addZero(getHours())+':' +
addZero(getMinutes()) +':'+ addZero(getSeconds()) +'.000Z';
于 2012-05-01T10:28:57.917 回答
0

在 Mozilla Javascript 参考页面上有一个很好的功能,用于生成 ISO 日期字符串的日期

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date

    /* use a function for the exact format desired... */
function ISODateString(d){
  function pad(n){return n<10 ? '0'+n : n}
  return d.getUTCFullYear()+'-'
      + pad(d.getUTCMonth()+1)+'-'
      + pad(d.getUTCDate())+'T'
      + pad(d.getUTCHours())+':'
      + pad(d.getUTCMinutes())+':'
      + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z
于 2012-05-01T10:29:35.880 回答