Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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
Javascript 有效地将JSON日期与JS日期对象进行比较_Javascript_Json_Algorithm_Google Visualization - Fatal编程技术网

Javascript 有效地将JSON日期与JS日期对象进行比较

Javascript 有效地将JSON日期与JS日期对象进行比较,javascript,json,algorithm,google-visualization,Javascript,Json,Algorithm,Google Visualization,我有来自SQL查询[{date,text,desc},{,,,}]的JSON,我需要有效地将日期(date1,date2,…)与多个其他JS date对象(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 (date

我有来自SQL查询[{date,text,desc},{,,,}]的JSON,我需要有效地将日期(date1,date2,…)与多个其他JS date对象(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和30-90'b。

其他信息:

  • JSON日期为DESC
  • JS日期为ASC
  • 比较的实现方式如下
  • 当日期匹配时,返回要处理的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)}

对于每个查询日期,将其转换为带有
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;
}
函数filterCharts(json,日期)
{
风险值来源=新日期(“2000-01-01T00:00:00”);
var dateLookup={};
对于(变量i=0;i

我不知道您希望如何管理时区,因此我将由您决定。

非常感谢您,为我在这个实现上的变化提供了开始(将日期本身存储为密钥)!但是我必须问,var x={}与var y=[]之间的数据结构/区别是什么?另外,您是否知道为什么我得到
var jsonDate=new Date(json[I].annotationDate.Date)作为无效日期?我必须将其转换为字符串,并使用setFullyear、setMonth、setDate设置日期!Ecma脚本标准将有效日期字符串定义为
T
T
。日期的格式为
yyyy
yyy-mm
yyy-mm-dd
。时间的格式为
hh:mm
hh:mm:ss
hh:mm:ss.fff
。时区的格式为
Z
+hh:mm
-hh:mm
。根据JavaScript引擎的不同,允许有细微的变化。如果将空格替换为
T
,它将遵循规范,并应解析为有效日期。
{}
是一个空JavaScript对象。它可以用作字典,但有一些限制<代码>[]
是一个空列表。谢谢,您已经为我清除了它,我将在重新检查代码时考虑您的日期时间标准。非常感谢!