0

我有来自 SQL 查询 [{date, text, desc},{,,,}] 的 JSON,我需要将日期 (date1, date2, ...) 与多个其他 JS 日期对象(b1, b2, . ..) 有效率的。

问题是:目前我必须将每个 JSON 日期转换为 JS 日期对象,然后才能比较它们,例如:

(date1->a1) then (a1 to b1)
else (date2->a2) then (a2 to b1)
else (daten->an) then (an to b1)
... then
(date1->a1) then (a1 to b2)
else (date2->a2) then (a2 to b2)
else (daten->an) then (an to b2)
... and again for each b

我正在寻找一种更有效的方法来进行这种转换比较,因为可能有 ~90 'a's 和 30-90 'b's。

附加信息:

  • JSON 日期是 DESC
  • JS 日期是 ASC
  • 比较的实现方式类似于如何格式化 Microsoft JSON 日期?
  • 当日期匹配时,返回要处理的 JSON 对象
  • 如果没有匹配的日期,则返回 false
  • 如果 b > a,我确实有一个提前退出,但早期很多人不会符合这个标准

我在 JS 函数中使用它来将“文本”字段插入到 Google 图表的表格中。

非常感谢您提前查看我的问题!

示例 JSON:

[
  {
    "id": 797,
    "title": "test",
    "description": "test",
    "annotationDate": {
      "date": "2013-06-02 00:00:00",
      "timezone_type": 3,
      "timezone": "America\/Los_Angeles"
    },
    "discr": "annotation"
  },
  {
    "id": 806,
    "title": "recent",
    "description": null,
    "annotationDate": {
      "date": "2013-06-01 00:00:00",
      "timezone_type": 3,
      "timezone": "America\/Los_Angeles"
    },
    "discr": "annotation"
  }
]

示例 JS 日期对象:

Date {Sat Jun 01 2013 11:19:35 GMT-0700 (PDT)}
Date {Sun Jun 02 2013 11:19:35 GMT-0700 (PDT)}
Date {Mon Jun 03 2013 11:19:35 GMT-0700 (PDT)}
Date {Tue Jun 04 2013 11:19:35 GMT-0700 (PDT)}
4

1 回答 1

0

对于每个查询日期,使用 将其转换为数字Number(d),并存储在字典(JavaScript 对象)中。循环遍历 JSON 对象,并将每个日期字符串转换为Date对象,然后转换为数字。检查该号码是否存在于字典中。

function filterCharts(json, dates)
{
    var origin = new Date("2000-01-01T00:00:00");

    var dateLookup = {};
    for (var i = 0; i < dates.length; i++)
    {
        var key = dates[i] - origin; // milliseconds
        key = Math.round(key / 86400000); // days
        dateLookup[key] = true;
    }

    var result = [];
    for (var i = 0; i < json.length; i++)
    {
        var jsonDate = new Date(json[i].annotationDate.date.replace(" ", "T"));
        var key = jsonDate - origin; // milliseconds
        key = Math.round(key / 86400000); // days
        if (dateLookup[key])
        {
            result.push(json[i]);
        }
    }

    return result;
}

我不知道你想如何管理时区,所以我会留给你。

于 2013-06-12T23:00:52.090 回答