Помогите мне с алгоритмом .. Javascript - PullRequest
0 голосов
/ 13 октября 2010

На своей странице я делаю 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 ]

3 голосов
/ 13 октября 2010

Похоже, вам просто нужно перебрать каждый элемент и сравнить время даты, сохраняя текущий элемент, если он ближе, чем последний элемент, который вы сравнили.

Предполагается, что ваш массив 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;
  }
}
0 голосов
/ 14 октября 2010

Моя версия сделана из ответа Мегар ... Большое спасибо !!!

$(json).each( function(i) {    
if (Math.abs(cur_time - time) < Math.abs(cur_time - closest)) {
      closest = time;
      current_pk=pk;
  }
}
}
);
0 голосов
/ 14 октября 2010

Довольно часто метки времени UTC, возвращаемые через запросы JSON, имеют формат ISO 8601 (например, как возвращено интерфейсом JSON в программное обеспечение MediaWiki, которое поддерживает Википедию).Перед выполнением арифметики даты вам необходимо преобразовать ее в формат, который распознает веб-браузер.

(см. Проблема с форматами даты в JavaScript в разных браузерах , чтобы узнать, как это сделать, используярегулярные выражения.)

Тогда вам нужно будет вычесть это время (new Date(timeString.replace(...)...)) из текущего времени (new Date()).Это даст вам интервал между двумя значениями в миллисекундах (1 секунда = 1000 миллисекунд).

Имейте в виду, что на это влияет точность системных часов клиентского компьютера, которую вы не можете контролировать, еслиработают публичный веб-сайт.В этом случае вы должны сравнить время на вашем сервере или, по крайней мере, позволить своему серверу отправлять точное время клиенту через JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...