Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js d3时标给我一个NaN_D3.js_Rhino - Fatal编程技术网

D3.js d3时标给我一个NaN

D3.js d3时标给我一个NaN,d3.js,rhino,D3.js,Rhino,我尝试通过Java+rhino+evjs+d3呈现svg。所有的东西都能很好地使用线性刻度。只是在时间尺度上,我遇到了一个我无法解决的问题 请检查这一小块javascript: function Scale_timed(f,domain,range){ var obj = this; this.field = f; // print (DATA.jsGetDomain(domain)[0] + "/" + DATA.jsGetDomain(domain)[1]);

我尝试通过Java+rhino+evjs+d3呈现svg。所有的东西都能很好地使用线性刻度。只是在时间尺度上,我遇到了一个我无法解决的问题

请检查这一小块javascript:

function Scale_timed(f,domain,range){
    var obj = this;
    this.field = f;

    // print (DATA.jsGetDomain(domain)[0] + "/" + DATA.jsGetDomain(domain)[1]);
    // print (range[0] + "/" + range[1]);
    this.scale = d3
        .time.scale()
        .range(range)
        .domain(DATA.jsGetDomain(domain));

    this.get = function(i) {
        print("lala: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i)));
        return obj.scale(DATA.jsGetPrimitive(obj.field,i));
    };
}
其中,数据是rhino脚本作用域中的Java对象。输出清楚地表明scale函数inputparameter是一个日期,但我仍然从scale函数中得到一个NaN

输出:

lala: Tue Jan 04 00:00:00 CET 2011 - 4 - NaN
lala: Wed Jan 05 00:00:00 CET 2011 - 5 - NaN
lala: Thu Jan 06 00:00:00 CET 2011 - 6 - NaN
lala: Fri Jan 07 00:00:00 CET 2011 - 7 - NaN
lala: Mon Jan 10 00:00:00 CET 2011 - 10 - NaN
我认为问题出在d3量表的使用上。。。所以我只会用d3标签问这个问题

编辑:这将非常有效:

function Scale_timed(f,dom,range){
    var obj = this;
    this.field = f;

    // print (DATA.jsGetDomain(domain)[0].getDate() + "/" + DATA.jsGetDomain(domain)[1].getDate());
    // print ("range: "+ range[0] + "/" + range[1]);
    this.scale = d3
        .scale.linear() //.time.scale()
        .range(range)
        .domain([DATA.jsGetDomain(dom)[0].getTime(), DATA.jsGetDomain(dom)[1].getTime()])
        //.domain(DATA.jsGetDomain(dom))
        .nice();

    this.get = function(i) {
        print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i).getTime()));
        return obj.scale(DATA.jsGetPrimitive(obj.field,i));
    };
}

现在我认为这是rhino的问题,可能是Date.protype函数丢失了

事实上这是Rhino的问题,Rhino使用java.util.Date作为日期,而不是ECMA日期,因此您必须自己转换它。。世界跆拳道联盟。。但这将起作用:

function Scale_timed(f,dom,range){
    var obj = this;
    var domain = DATA.jsGetDomain(dom);
    for (var i=0;i<domain.length;i++) domain[i] = new Date(domain[i].getTime());

    this.field = f;

    this.scale = d3
        .time.scale()
        .range(range)
        .domain(domain)
        ;

    this.get = function(i) {
        // print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i).getTime()));
        print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(new Date(DATA.jsGetPrimitive(obj.field,i).getTime())));
        return obj.scale(new Date(DATA.jsGetPrimitive(obj.field,i).getTime()));
    };
}
function Scale\u timed(f、dom、range){
var obj=这个;
var domain=DATA.jsGetDomain(dom);

对于(var i=0;i什么是
范围
?您传入的值可能在它之外。@Larskothoff范围是范围:[0650],什么是
?@Larskothoff输入域,输出范围-这是我学到的:-)因此,有人只能绘制数字形式的svg坐标。时间刻度将日期域转换为整数范围。请参阅:->“给定数组中的元素不必是数字”@LarsKotthoff domain是[Mon Jan 03 00:00:00 CET 2011,Sat Feb 05 00:00:00 CET 2011]-完美的日期对象