Я беру свой первый кряк в Ajax с помощью jQuery. Я перенесу свои данные на свою страницу, но у меня возникли проблемы с данными JSON, которые возвращаются для типов данных Date. По сути, я получаю строку, которая выглядит следующим образом:
/Date(1224043200000)/
От кого-то совершенно нового для JSON - Как мне отформатировать это в короткий формат даты? Должно ли это быть обработано где-то в коде jQuery? Я пытался использовать jQuery.UI.datepicker
плагин $.datepicker.formatDate()
без какого-либо успеха.
К вашему сведению: вот решение, которое я нашел, используя комбинацию ответов здесь:
function getMismatch(id) {
$.getJSON("Main.aspx?Callback=GetMismatch",
{ MismatchId: id },
function (result) {
$("#AuthMerchId").text(result.AuthorizationMerchantId);
$("#SttlMerchId").text(result.SettlementMerchantId);
$("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
$("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
$("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
$("#LastUpdatedBy").text(result.LastUpdateNt);
$("#ProcessIn").text(result.ProcessIn);
}
);
return false;
}
function formatJSONDate(jsonDate) {
var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
return newDate;
}
Это решение получило мой объект из метода обратного вызова и правильно отобразило даты на странице, используя библиотеку формата даты.
Date
.Ответы:
eval()
не обязательно. Это будет хорошо работать:substr()
Функция вынимает/Date(
часть, аparseInt()
функция получает целое число и игнорирует)/
в конце. Полученный номер передается вDate
конструктор.Я намеренно пропустил основание (второй аргумент
parseInt
); см. мой комментарий ниже .Кроме того, я полностью согласен с комментарием Рори : даты ISO-8601 предпочтительнее этого старого формата, поэтому этот формат обычно не следует использовать для новых разработок. Посмотрите превосходную библиотеку Json.NET для отличной альтернативы, которая сериализует даты, используя формат ISO-8601.
Для дат JSON в формате ISO-8601 просто передайте строку в
Date
конструктор:источник
Вы можете использовать это, чтобы получить дату от JSON:
И затем вы можете использовать скрипт формата даты JavaScript (1,2 КБ при минимизации и сжатии), чтобы отобразить его, как вы хотите.
источник
jsonDate = new Date(+jsonDate.replace(/\/Date\((\d+)\)\//, '$1'));
new Function
почти так же плохо, какeval
: dev.opera.com/articles/view/efficient-javascript/…Для тех, кто использует Newtonsoft Json.NET , читайте о том, как это сделать через Native JSON в IE8, Firefox 3.5 плюс Json.NET .
Также полезна документация по изменению формата дат, написанных Json.NET: Сериализация дат с помощью Json.NET
Для тех, кто слишком ленив, вот быстрые шаги. Поскольку JSON имеет свободную реализацию DateTime, вам нужно использовать
IsoDateTimeConverter()
. Обратите внимание, что начиная с Json.NET 4.5 формат даты по умолчанию - ISO, поэтому приведенный ниже код не требуется.JSON придет как
Наконец, немного JavaScript для преобразования даты ISO в дату JavaScript:
Я использовал это так
источник
new Date("2009-04-12T20:44:55")
+a[1]
etc представляет части массива регулярного выражения, и+
он будет приводить его к числу,+a[1]
равному2009
и т. д. Вот разбивка массива:0: "2009-04-12T20:44:55" 1: "2009" 2: "04" 3: "12" 4: "20" 5: "44" 6: "55"
Оригинальный пример:
не отражает форматирование, используемое WCF при отправке дат через WCF REST с использованием встроенной сериализации JSON. (по крайней мере, на .NET 3.5, SP1)
Я нашел ответ здесь полезным, но требуется небольшое редактирование регулярного выражения, так как кажется, что смещение часового пояса GMT добавляется к числу, возвращенному (с 1970 года) в WCF JSON.
В службе WCF у меня есть:
ApptVisitLinkInfo определяется просто:
Когда «Field2» возвращается как Json из службы, значение равно:
Обратите внимание на смещение часового пояса, включенное как часть значения.
Модифицированное регулярное выражение:
Это немного более нетерпеливо и захватывает все между скобками, а не только первое число. Полученное время sinze 1970, плюс смещение часового пояса, все могут быть переданы в eval для получения объекта даты.
Результирующая строка JavaScript для замены:
источник
Не повторяйте себя - автоматизируйте преобразование даты с помощью
$.parseJSON()
Ответы на ваш пост обеспечивают ручное преобразование дат в JavaScript. Я
$.parseJSON()
немного расширил jQuery , поэтому он может автоматически разбирать даты, когда вы указываете это. Он обрабатывает даты в формате ASP.NET (/Date(12348721342)/
), а также даты в формате ISO (2010-01-01T12.34.56.789Z
), которые поддерживаются встроенными функциями JSON в браузерах (и библиотеками, такими как json2.js).Тем не мение. Если вы не хотите повторять ваш код преобразования даты снова и снова, я предлагаю вам прочитать этот блог и получить код, который сделает вашу жизнь немного проще.
источник
Если вы говорите в JavaScript,
вы увидите, что это правильная дата, и вы можете использовать ее в любом месте кода JavaScript с любым фреймворком.
источник
Нажмите здесь, чтобы проверить демо
JavaScript / JQuery
Результат - "15.10.2008"
источник
обновленный
У нас есть внутренняя библиотека пользовательского интерфейса, которая должна работать как со встроенным форматом JSON Microsoft ASP.NET, например
/Date(msecs)/
, , об этом спрашивали изначально, так и с большинством форматов дат JSON, включая JSON.NET2014-06-22T00:00:00.0
. Кроме того, нам нужно справиться с неспособностью oldIE справиться с чем-либо, кроме трех знаков после запятой .Сначала мы определяем, какую дату мы потребляем, анализируем ее в обычный
Date
объект JavaScript , а затем форматируем ее.1) Определить формат даты Microsoft
2) Определить формат даты ISO
3) Парс MS формат даты:
4) Разобрать формат даты ISO.
У нас есть, по крайней мере, способ убедиться, что мы имеем дело со стандартными датами ISO или датами ISO, измененными, чтобы всегда иметь три миллисекунды ( см. Выше ), поэтому код отличается в зависимости от среды.
4a) Разобрать стандартный формат даты ISO, справиться с проблемами oldIE:
4b) Разобрать формат ISO с фиксированным трех миллисекундным десятичным знаком - намного проще:
5) Отформатируйте это:
6) Свяжите все это вместе:
Приведенный ниже старый ответ полезен для того, чтобы связать это форматирование даты с собственным JSON-анализом JSON, чтобы вы получали объекты Date вместо строк или если вы все равно застряли в jQuery <1.5.
Старый ответ
Если вы используете функцию Ajax jQuery 1.4 с ASP.NET MVC, вы можете превратить все свойства DateTime в объекты Date с помощью:
В jQuery 1.5 вы можете избежать
parseJSON
глобального переопределения метода, используя опцию преобразователей в вызове Ajax.http://api.jquery.com/jQuery.ajax/
К сожалению, вам нужно переключиться на более старый eval-маршрут, чтобы Dates мог анализироваться глобально, иначе вам нужно конвертировать их в более индивидуальном порядке после анализа.
источник
В JSON нет встроенного типа даты . Это похоже на количество секунд / миллисекунд от некоторой эпохи. Если вы знаете эпоху, вы можете создать дату, добавив нужное количество времени.
источник
Мне также пришлось искать решение этой проблемы, и в конце концов я натолкнулся на moment.js, отличную библиотеку, которая может анализировать этот формат даты и многое другое.
Это избавило меня от головной боли, поэтому я решил поделиться этим с вами. :)
Вы можете найти больше информации об этом здесь: http://momentjs.com/
источник
В итоге я добавил символы "в регулярное выражение Panos, чтобы избавиться от символов, сгенерированных сериализатором Microsoft для записи объектов во встроенный скрипт:
Так что если у вас есть свойство в вашем коде C # это что-то вроде
И в вашем aspx у вас есть
Вы получите что-то вроде
Обратите внимание на двойные кавычки.
Чтобы получить это в форме, которую eval будет правильно десериализовать, я использовал:
Я использую Prototype и для его добавления я добавил
источник
В jQuery 1.5, если у вас есть json2.js для старых браузеров, вы можете десериализовать все даты из Ajax следующим образом:
Я включил логику, которая предполагает, что вы отправляете все даты с сервера в формате UTC (что вам следует); Затем потребитель получает
Date
объект JavaScript, который имеет правильное значение ticks, чтобы отразить это. То есть, вызовgetUTCHours()
и т. Д. В дату вернет то же значение, что и на сервере, и вызовgetHours()
вернет значение в местном часовом поясе пользователя, как определено его браузером.Это не учитывает формат WCF со смещением часового пояса, хотя это было бы относительно легко добавить.
источник
Использование средства выбора даты jQuery UI - действительно имеет смысл, только если вы уже включили jQuery UI:
вывод:
источник
Не думай об этом. Как и в течение десятилетий, передайте числовое смещение от стандартной фактической эпохи 1 января 1970 года по полуночи GMT / UTC / & c в секундах (или миллисекундах) с этой эпохи. JavaScript нравится, Java нравится, C нравится, а Интернету нравится.
источник
У каждого из этих ответов есть одна общая черта: все они хранят даты как одно значение (обычно строку).
Другой вариант - воспользоваться преимуществами внутренней структуры JSON и представить дату в виде списка чисел:
Конечно, вы должны убедиться, что оба конца беседы согласуются с форматом (год, месяц, день) и полями, которые должны быть датами, ... но у него есть то преимущество, что вы полностью избегаете вопроса о дате. Преобразование в строку. Это все числа - никаких строк. Кроме того, использование порядка: год, месяц, день также позволяет правильно сортировать по дате.
Просто подумайте нестандартно - дату JSON не нужно хранить в виде строки.
Другим преимуществом такого подхода является то, что вы можете легко (и эффективно) выбирать все записи за определенный год или месяц, используя способ, которым CouchDB обрабатывает запросы к значениям массива.
источник
Публикация в отличной теме:
источник
Просто чтобы добавить еще один подход, «тиковый подход», который использует WCF, подвержен проблемам с часовыми поясами, если вы не слишком осторожны, как описано здесь и в других местах. Поэтому сейчас я использую формат ISO 8601, который должным образом поддерживает и .NET, и JavaScript, включая смещения часовых поясов. Ниже приведены подробности:
В WCF / .NET:
Где CreationDate - это System.DateTime; ToString ("o") использует спецификатор формата туда и обратно .NET, который генерирует строку даты, совместимую с ISO 8601
В JavaScript
Сразу после получения JSON я исправляю даты, чтобы они были объектами JavaSript Date, используя конструктор Date, который принимает строку даты ISO 8601 ...
Если у вас есть дата JavaScript, вы можете использовать все удобные и надежные методы Date, такие как toDateString , toLocaleString и т. Д.
источник
Есть ли другой вариант без использования библиотеки jQuery?
источник
Это может также помочь вам.
источник
Ниже приведено довольно простое решение для анализа дат JSON. Используйте следующие функции согласно вашему требованию. Вам просто нужно передать формат даты JSON, выбранный в качестве параметра для функций ниже:
источник
Вы также можете использовать библиотеку JavaScript moment.js , которая пригодится, когда вы планируете работать с различными локализованными форматами и выполнять другие операции со значениями дат:
Настроить локализацию так же просто, как добавить файлы конфигурации (вы можете получить их на momentjs.com) в свой проект и настроить язык:
источник
Я получаю дату как это:
В некоторых примерах дата имеет несколько разные форматы:
и т.п.
Итак, я придумал следующий RegExp:
и окончательный код:
Надеюсь, поможет.
Обновление: Я нашел эту ссылку от Microsoft: Как мне сериализовать даты с помощью JSON?
Это похоже на то, что мы все ищем.
источник
Проверьте дату стандарта ISO; вроде как это:
Это становится
2008.11.20T22:18
.источник
Это расстраивает. Мое решение состояло в том, чтобы разобрать «/ и /» из значения, сгенерированного JavaScriptSerializer ASP.NET, так что, хотя JSON может не иметь литерала даты, он все равно интерпретируется браузером как дата, и это все, что я действительно хотеть:
{"myDate":Date(123456789)}
Пользовательский JavaScriptConverter для DateTime?
Я должен подчеркнуть точность комментария Роя Тинкера. Это не законный JSON. Это грязный, грязный хак на сервере, чтобы удалить проблему, прежде чем она станет проблемой для JavaScript. Он захлебнется парсером JSON. Я использовал это для того, чтобы оторваться от земли, но я больше не использую это. Тем не менее, я все еще чувствую, что лучший ответ заключается в изменении того, как сервер форматирует дату, например, ISO, как упоминалось в другом месте.
источник
Поздний пост, но для тех, кто искал этот пост.
Вообразите это:
Как вы можете видеть, я использую функцию C # 3.0 для создания «авто» Generics. Это немного лениво, но мне это нравится, и это работает. Просто примечание: Профиль - это пользовательский класс, который я создал для своего проекта веб-приложения.
источник
К вашему сведению, для тех, кто использует Python на стороне сервера: datetime.datetime (). Ctime () возвращает строку, которая изначально анализируется с помощью «new Date ()». То есть, если вы создаете новый экземпляр datetime.datetime (например, с datetime.datetime.now), строка может быть включена в строку JSON, а затем эта строка может быть передана в качестве первого аргумента конструктору Date. Я еще не нашел каких-либо исключений, но я не проверял это слишком строго.
источник
Mootools решение:
Требует mootools-больше. Протестировано с использованием mootools-1.2.3.1-more на Firefox 3.6.3 и IE 7.0.5730.13
источник
источник
Добавьте плагин jQuery UI на свою страницу:
источник
Что делать, если .NET возвращает ...
А потом в JavaScript ...
источник