У меня есть следующий фрагмент JSON:
\/Date(1293034567877)\/
который является результатом этого кода .NET:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Теперь проблема, с которой я столкнулся, заключается в том, как создать объект Date из этого в JavaScript. Все, что я смог найти, - это невероятное решение для регулярных выражений (многие из которых содержат ошибки).
Трудно поверить, что нет элегантного решения, поскольку все это в JavaScrip, я имею в виду код JavaScript, пытающийся прочитать JSON (нотация объектов JavaScript), который должен быть кодом JavaScript, и на данный момент оказывается, что это не значит, что JavaScript не может хорошо поработай здесь.
Я также видел некоторые решения eval, которые я не мог заставить работать (кроме того, что они были указаны как угроза безопасности).
Неужели нет способа сделать это элегантно?
Аналогичный вопрос без реального ответа:
как разобрать формат даты ASP.NET JSON с помощью GWT
источник
new Date()
его.Ответы:
Стандартного представления дат в формате JSON не существует. Вы должны делать то, что предлагает @jAndy, и вообще не сериализовать a
DateTime
; просто отправьте строку даты RFC 1123ToString("r")
или номер эпохи в секундах от Unix, или что-то еще, что вы можете использовать в JavaScript для создания файлаDate
.источник
JSON.parse
Функция принимает дополнительную функцию DateTime Reviver. Вы можете использовать такую функцию:Тогда позвони
И твои свидания получатся удачными.
источник
Этот ответ от Роя Тинкера здесь :
Как он говорит: функция substr извлекает часть "/ Date (", а функция parseInt получает целое число и игнорирует ") /" в конце. Полученное число передается в конструктор Date.
Другой вариант - просто правильно отформатировать вашу информацию на стороне ASP, чтобы JavaScript мог ее легко прочитать. Попробуйте сделать это для своих свиданий:
Что должно возвращать такой формат:
Если вы передадите это в
Date
конструктор JavaScript следующим образом:Теперь переменная
date
содержит это значение:Естественно, вы можете отформатировать этот
DateTime
объект в любую строку / int, которуюDate
принимает конструктор JS .источник
если вы используете дату ISO8601 в стиле JavaScript в JSON, вы можете использовать это из MDN
источник
Вы можете преобразовать дату JSON в обычный формат даты в JavaScript.
источник
Что случилось с:
Это возвращается для меня «среда, 22 декабря 2010 г., 16:16:07 GMT + 0000 (стандартное время по Гринвичу)».
Или вам нужно вывести номер из json?
источник
\/Date(1293034567877)\/
. Если бы это было разумно, он просто выводил бы время эпохи, и вы могли бы инициализировать объект Date с его помощью.Я знаю, что это очень старая ветка, но я хочу опубликовать ее, чтобы помочь тем, кто наткнется на нее, как и я.
если вам не нужен сторонний скрипт, вы можете использовать moment, js. Затем вы можете использовать .format (), чтобы отформатировать его так, как вы хотите.
источник
Свидания - всегда кошмар. Отвечая на ваш старый вопрос, возможно, это самый элегантный способ:
С помощью eval мы конвертируем нашу строку в код javascript. Затем убираем «/», в функцию замены входит регулярное выражение. Поскольку мы начинаем с нового, наши предложения будут исключать это:
Одна вещь, которую я начал использовать очень давно, - это длинные значения, которые представлены в тиках ... почему? ну, локализация и перестаньте думать, как настраивается дата на каждом сервере или каждом клиенте. Фактически, я тоже использую его в базах данных.
Возможно, уже довольно поздно для этого ответа, но может помочь любому здесь.
источник
AngularJS также не смог проанализировать
/Date(xxxxxxxxxxxxx)/
строку даты .NET JSON .Я решил эту проблему, отформатировав дату в строковое представление ISO 8601 вместо того, чтобы
Date
напрямую выгружать объект ...Вот образец кода ASP.NET MVC ..
Я пробовал,
RFC 1123
но это не сработало .. Angular рассматривает это как строку вместо даты.источник
Я не использовал .Net для подобных вещей. Если вам удалось заставить его напечатать что-то вроде следующего, он должен работать.
Обратите внимание, если вы не анализируете эту строку JSON каким-либо другим способом или не ожидаете, что у пользователей будут современные браузеры со встроенным анализатором JSON, вам необходимо использовать JS framework или JSON2 для синтаксического анализа строки JSON, выводимой сервером, в настоящий JSON. объект.
Вики-ссылка
Ссылка на файл JSON2
Живой пример
источник
Ответ на этот вопрос: используйте nuget для получения JSON.NET, а затем используйте его внутри своего
JsonResult
метода:внутри вашего представления просто сделайте это в
javascript
:Если это вызов ajax:
После
JSON.parse
вызова вы можете поместить дату JSON вnew Date
экземпляр, потому чтоJsonConvert
создает правильный экземпляр времени ISOисточник
источник
Как сказал Каллум, для меня лучший способ - изменить метод контроллера на строковый вместо JsonResult ".
Из метода ajax вы можете сделать что-то вроде этого
источник
использование функции eval работает, просто нужно удалить косую черту спереди и сзади.
дает Thu Jan 01 1970 00:00:00 GMT-0700 (Горное стандартное время США)
источник
У меня возникла проблема с внешним API, предоставляющим даты в этом формате, иногда даже с информацией о разнице в формате UTC, например
/Date(123232313131+1000)/
. Мне удалось превратить его вDate
объект js с помощью следующего кодаисточник
источник
// Используем эту функцию
источник