我在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'");
答案 0 :(得分: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...
}
答案 1 :(得分:0)
看起来您的报价已关闭。尝试
return "with (this)\n return " +
getFullYear() + '-' + addZero(getMonth()+1) + '-' +
addZero(getDate()) + 'T' + addZero(getHours())+':' +
addZero(getMinutes()) +':'+ addZero(getSeconds()) +'.000Z';
答案 2 :(得分:0)
在生成ISO日期字符串的日期的Mozilla Javascript参考页面上有一个很好的功能
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
答案 3 :(得分:0)
尝试重写这样的日期扩展名,以便清楚地了解to avoid using the with
keyword:
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
是没有必要甚至可以称为不良做法。 BTW,毫秒被添加到结果中(用零填充)。