如何根据当前日期和昨天的日期过滤掉过滤器?

时间:2018-01-01 12:20:16

标签: dc.js crossfilter

我想在crossfilter中进行查询,以过滤今天的所有数据。

示例:我有这个查询:

var countPerDim2 = Dim2.filterExact("1.1.2018").group().reduceSum();

因此,crossfilter将过滤1.1.2018中的数据。

但我想让crossfilter自动获取当前日期。 我的理由是我想绘制两个图表来比较它们。 喜欢:

图1按日期1.1.2018和图2按日期31.12.17

如何在昨天的日期前获取过滤器?当天有datenow()这样的函数吗?昨天的日期可能是datenow(-1)吗?

谢谢你,新年快乐!

1 个答案:

答案 0 :(得分:1)

今天和昨天

要回答您的直接问题,JavaScript的new Date()会将当前时间和日期作为JavaScript Date对象返回。然后你只需要将日期对象转换为符合日期格式的字符串。

您可以使用d3.time.format来生成这些字符串。看起来你会想要像

这样的东西
d3.time.format('%-d.%-m.%Y')

(或者可能与md相反 - 从您的示例中不清楚月份或日期是否第一次出现)

昨天就像是

var date = new Date();
date.setDate(date.getDate()-1);

有关详细信息,请参阅JavaScript Date documentation

比较两天

但是,我认为你会遇到一个更基本的问题,那就是crossfilter没有多个过滤器的概念,所以很难将一个日期与另一个日期进行比较旁边的图表。

在我的头顶,我能想到的最好的事情是"冻结"使用假团体的团体:

function freeze_group(group) {
    var _all = group.all().slice();
    return {
        all: function() {
            return _all;
        }
    };
}

您应用了一个日期过滤器,然后调用

chart.group(freeze_group(group));
在图表上

您希望拥有该日期。现在它在过滤器更改时不会发生变化,您可以将其他日期过滤器应用于其他图表。