2016-09-01 2 views
0

В настоящее время у меня есть приложение, которое делает вызов для отдыха в api SharePoint, который дает мне последнюю измененную дату, а затем я сравниваю эту дату с датой, которую я сейчас храню как тег в управлении содержимым внутри слова doc. В настоящее время я использую метод New Date(), чтобы попытаться сравнить две даты, однако я получаю два разных раза. Оба эти даты встречаются в формате UTC, но форматируются разные.Преобразование и сравнение DateTime, которые находятся в разных форматах

DateTime, что я получаю от SharePoint в этом формате: 2016-08-27T17:40:09Z

DateTime хранится в Элементы управления содержанием тега: 8/27/2016 5:40:09 PM

Текущий код:

for (var x = 0; x < contentControls.items.length; x++) { 
         itemUrl = "https://*tenant*.sharepoint.com/sites/*site*/_api/web/Lists/GetByTitle('*list*')/items?select=Title,Title&$filter=Title eq '" + contentControls.items[x].title + "'"; 
         $.ajax({ 
          type: "GET", 
          async: false, 
          url: itemUrl, 
          headers: { 
           "Authorization": "Bearer " + sharepointToken, 
           "accept": "application/json;odata=verbose" 
          }, 
          success: function (data) { 

           var sharepointDateTime = data.d.results[0].Modified; 
           var contentControlDateTime = contentControls.items[0].tag; 

           var test1 = new Date(sharepointDateTime); 
           var test2 = new Date(contentControlDateTime); 

           if (test1 != test2) { 
            // custom code 
           }          
          }, 
          error: function (error) { 
           console.log("Fetching list from SharePoint failed."); 
          } 
         }) 
        } 

Желаемая Результат

Я хотел бы иметь возможность сравнивать две даты в моем заявлении условия, и если они разные, я собираюсь сделать что-то внутри своего заявления. ОЧЕНЬ Важно не может зависеть от текущей часовой зоны пользователя. Я сравнивая UTC Время

Update

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

ответ

1

Вы сравниваете ссылки на объекты двух объектов даты друг с другом, используя !=, а не точки времени. Хотя объекты могут представлять одну и ту же точку времени, условие всегда будет истинным.

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

test1.valueOf() != test2.valueOf() 

Также отметим, что вторая дата не содержит никакой информации о часовом поясе, так это will be interpreted in the local time zone of the environment the code is executed in. Это может привести к неожиданным результатам.

Возможно, вам понадобится look into Moment.js, который является стандартной библиотекой фактических данных для обработки дат в JavaScript и предлагает much more consistent and intuitive API для вашего прецедента.

+0

Эй, Тим, .value() дает мне временную метку эпохи, которую я также могу сравнить. Я решил это, изменив api, который запечатывает элементы управления содержимым. Я работаю во временном хрусте, поэтому я не мог много обидеть на этом. То, что я видел, теги управления контентом не были отмечены часовым поясом, поэтому они сравнивали яблоки и апельсины. Однако я хотел бы оставить этот вопрос открытым, чтобы узнать, может ли кто-то найти решение на стороне клиента. Спасибо. – EasyE

Смежные вопросы