Javascript 有效地将JSON日期与JS日期对象进行比较
我有来自SQL查询[{date,text,desc},{,,,}]的JSON,我需要有效地将日期(date1,date2,…)与多个其他JS date对象(b1,b2,…)进行比较 问题是:目前我必须先将每个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
(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,我确实有提前退出的机会,但在早期,很多人不会符合这个标准
[
{
"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对象。它可以用作字典,但有一些限制<代码>[]
是一个空列表。谢谢,您已经为我清除了它,我将在重新检查代码时考虑您的日期时间标准。非常感谢!