如何按当前日期和昨天的日期在 crossfilter 中进行过滤?

How to filter in crossfilter by current date and yesterday's date?

我想在交叉过滤器中进行查询以过滤今天日期的所有数据。

示例:我有这个查询:

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) 之类的函数?

谢谢,新年快乐!

今天和昨天

为了回答您的直接问题,JavaScript 的 new Date() 将 return 当前时间和日期作为 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 没有多个过滤器的概念,所以很难将一个日期与另一个日期进行并排比较-边图。

在我的脑海中,我能想到的最好的事情是 "freeze" 使用假群组的群组:

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

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

chart.group(freeze_group(group));

您希望在图表上显示该日期。现在过滤器更改时它不会更改,您可以将其他日期过滤器应用于其他图表。