帮我算法.. Javascript

时间:2010-10-13 18:19:58

标签: javascript jquery ajax json

在我的页面上,我正在制作ajax请求以从服务器获取数据。数据是JSON对象列表..

每个对象都有名称,描述和日期时间。如何在浏览器中获得更接近我的真实数据的对象...

示例:

$(json).each(
    function(i) {
         alert(json.datetime)
        //here have to be some algorithm to comparing the time with my current time instead of alert..
    });

3 个答案:

答案 0 :(得分:3)

听起来你只需要遍历每个元素并比较日期时间,如果它比你比较的最后一个元素更接近,则存储当前元素。

这假设您的json数组至少包含一个元素,并且您的datetime字段是标准的Unix时间戳。

var closest = json[0];
var current = Date.getTime() / 1000; // current datetime, in seconds since epoch

// start at the 2nd element
for (i = 1; i < json.length; ++i) {
  if (current - json[i].datetime < current - closest.datetime) {
    closest = current;
  }
}

答案 1 :(得分:0)

通常,通过JSON查询返回的UTC时间戳采用ISO 8601格式(例如,由为维基百科提供支持的MediaWiki软件的JSON接口返回)。在执行日期算术之前,您需要将其转换为Web浏览器将识别的格式。

(有关如何使用正则表达式执行此操作,请参阅Problem with date formats in JavaScript with different browsers。)

然后您需要从当前时间(new Date(timeString.replace(...)...))中减去该时间(new Date())。这将为您提供两次之间的间隔,以毫秒为单位(1秒= 1000毫秒)。

请注意,这会受到客户端计算机系统时钟准确性的影响,如果您正在运行公共网站,则无法控制该系统时钟。如果是这种情况,您应该比较服务器上的时间,或者至少允许服务器通过JSON向客户端发送准确的时间。

答案 2 :(得分:0)

我的版本是由meagar的答案制作的......非常感谢!!!

$(json).each( function(i) {    
if (Math.abs(cur_time - time) < Math.abs(cur_time - closest)) {
      closest = time;
      current_pk=pk;
  }
}
}
);