在我的页面上,我正在制作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..
});
答案 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;
}
}
}
);