Преобразование объекта даты и времени JSON в объект JavaScript - PullRequest
1 голос
/ 29 июня 2011

Мой JSON возвращает объект как этот

"/Date(1307514780000+0530)" 

Как мне преобразовать это в мой объект даты и времени JavaScript? Кроме того, что означает +0530? 1005 *

1 Ответ

6 голосов
/ 28 августа 2011

Под «My JSON» я полагаю, что вы имеете в виду способ, которым Microsoft ASP.NET передает объект даты и времени не так, как вы написали, а с косой чертой также в конце:

/Date(1307514780000+0530)/

JSON не поддерживает собственный тип JavaScript Date () , так что на самом деле это простая строка JSON, но Microsoft взламывает ее немного больше и фактически отправляет:

\/Date(1307514780000+0530)\/

И это разрешено для строки JSON, даже если обратная косая черта не требуется.(Эти две строки идентичны вашему клиентскому программному обеспечению JSON, но когда Microsoft JScript видит эти обратные слеши, он обрабатывает их как особую структуру. И, да, это высший взлом.)

Значение до знака(которое также может быть «-») - это количество миллисекунд с 1970-01-01 00:00:00 UTC.Знак и значение после него представляют часовой пояс презентации, в котором нет необходимости преобразовывать значение в собственный объект JavaScript Date () .Знак указывает, является ли часовой пояс до (+) или после (-) UTC, а числа отформатированы как «ЧЧММ», где «ЧЧ» - это количество часов, а «ММ» - это количество минут.(В этом случае «+0530» - это то же смещение часового пояса, что и стандартное время Индии, то есть «IST».)

Чтобы преобразовать его в собственный объект Date () с использованием стандартногокросс-браузер-совместимый JavaScript:

function getDateFromAspString(aspString) {
  var epochMilliseconds = aspString.replace(
      /^\/Date\(([0-9]+)([+-][0-9]{4})?\)\/$/,
      '$1');
  if (epochMilliseconds != aspString) {
      return new Date(parseInt(epochMilliseconds));
  }
}

Обратите внимание, что эта функция ничего не возвращает, если строка не является строкой даты и времени ASP.NET.Вы можете сравнить (===) результат с undefined , чтобы узнать, было ли что-либо возвращено.

В моем браузере этот вызов:

getDateFromAspString("/Date(1307514780000+0530)/").toString()

возвращает эту строку:

"Wed Jun 08 2011 01:33:00 GMT-0500 (Central Daylight Time)"

См. Также:

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