Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/39: Рейтинг темы: голосов - 39, средняя оценка - 4.72
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115

Сериализация строки JSON, содержащей дату

14.09.2011, 16:45. Показов 7899. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пытаюсь получить дату в "нормальном" виде, сериализовав json строку с помощью jsonParse (json_sans_eval.js) или же с помощью функций библиотеки dojo (dojo.js), но всё равно получаю непреобразованную дату

JavaScript
1
2
3
4
5
var str = '{\"endsAt\":\"\\/Date(-62135596800000+0000)\\/\"}';
 
window.alert(jsonParse(str).endsAt);
//либо
window.alert(dojo.fromJson(str).endsAt);
В том и в другом случае я получаю в сообщении: /Date(-62135596800000+0000)/ вместо нормальной даты. Подскажите, пожалуйста, в чём проблема.

Такую JSON строку выдаёт сервер, вытаскивая значение из соответствующего поля БД типа timestamp without time zone и затем сериализуя её с помощью класса JsonConvert библиотеки newtonsoft.dll

При всё при этом если в серверном коде сериализовать и тут же десериализовать дату, то она будет в "нормальном" виде

Добавлено через 1 час 43 минуты
Ну неужели никто не может помочь?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2011, 16:45
Ответы с готовыми решениями:

Возвести в квадрат строки матрицы между строкой, содержащей min и строкой, содержащей max элементы
Ввести двумерный массив A n*m, вывести его. Возвести в квадрат все строки которые расположены между строкой максимума и минимума этой...

Сериализация в JSON
Добрый день. Прошерстил доки по сериализации JSON, нагугли несколько библиотек, но так и не смог сериализовать свою структуру. ...

Сериализация в json
Есть сервер-клиент, работает через асинхронные Udp сокеты, каждые 5 миллисекунд обмениваются информацией в формате json. Проблема в том,...

9
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
14.09.2011, 17:13
А вот так.
JavaScript
1
window.alert(Date(JSON.parse(str).endsAt));
И это, кстати, без фреймворков.
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
15.09.2011, 14:36  [ТС]
Я уже попробовал так. Firefox, Google Chrome и IE возвращают текущее системное время, а не то, которое приходит от сервера

Добавлено через 19 часов 35 минут
Не верю, что на этом форуме нет знающих людей
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
16.09.2011, 09:45
Вот работающий вариант. Чрез заднее отверстие, но возвращает дату. На вход сырой ответ сервера.
Я так полагаю, ваш пример ('{\"endsAt\":\"\\/Date(-62135596800000+0000)\\/\"}') он и есть?

JavaScript
1
2
3
4
5
6
7
8
function makeDate(jtxt)
{
    var txt=JSON.parse(jtxt).endsAt;
    var r=/\//g;
    one=txt.replace(r,"");
    one="new "+one;
    return eval(one);
}
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
16.09.2011, 11:42  [ТС]
Спасибо за помощь, но увы дата возвращается не та. Должно быть 07.09.2011 13:45:20, а получается 01 01 0001 00:00:00.

Пока я не придумал ничего лучше кроме того, чтобы на сервере конвертить из бд дату в строку, а её уже загонять в json. Затем на клиенте, если понадобятся вычисления с датой, использовать функцию, создающую дату из этой строки в нужном мне формате:

JavaScript
1
2
3
function dateConvert(dateString) {
        var date = new Date(dateString.replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));
        return date;
Пи вызове передаётся та же json строка, только дата уже там выглядит читабельно. Понимаю, что это не самый подход, ведь теперь придётся следить, чтобы сервер возвращал валидную дату для функции dateConvert. В общем подход такой же, как вы предложили, через регулярку и replace, но дату создавать не из строки, в которой по смыслу timeStamp, а из строки, в которой по смыслу DateTime
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
16.09.2011, 12:53
Было бы проще работать, если бы изначально указали, какую дату обозначают цифры. А так я получил дату, отличную от сегодняшней, и решил что есть контакт. А то как-то даже неудобно: потчевал вас нерабочими вариантами.

Добавлено через 20 минут
Если я верно понял машинную логику, то, Javascript и php по-разному считают миллисекунды. Нужно попробовать получить цифровое значение для одной даты в js и php и посчитать смещение. Может так?
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
16.09.2011, 14:24  [ТС]
Эмм... если честно, не совсем понимаю ваше предложение. При чём тут php?. Имеете ввиду посчитать количество миллисекунд от какой-либо даты на сервере (.net сервер на C#) и то же самое проделать на javascript? У меня уже была такая мысль, но я также посчитал это вариантом через одно место. Теперь думаю, что всё-таки придётся к нему вернуться, т.к. то, что постом выше по большому счёту не годится
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
16.09.2011, 15:03
Цитата Сообщение от McKay Посмотреть сообщение
При чём тут php?. Имеете ввиду посчитать количество миллисекунд от какой-либо даты на сервере (.net сервер на C#) и то же самое проделать на javascript?
Взять одну дату. Скормить её C# и js (тем функциям, которые переводят дату в числовое представление), высчитать разницу (по крайней мере содержательной части, отбросив на время расчётов часть +0000). На js числовое представление — это количество миллисекунд, начиная от полуночи 01 января 1970 года GMT+0. День содержит 86,400,000 миллисекунд. А как C# формирует числовое представление даты? В данном случае просто они от разных дат отталкиваются, если я правильно понимаю. Или я понимаю неправильно и всё сложнее?
Если собрать функцию конвертации числового представления даты C#->js то задача тривиальна: выдрать число, конвертнуть, скормить js функции Date().
В серверах не разбираюсь, прошу прощения. Я полагал, раз сервер, значит php и точка.

Добавлено через 10 минут
Цитата Сообщение от McKay Посмотреть сообщение
... но я также посчитал это вариантом через одно место...
Но это одно место уже гораздо ближе к верхней половине туловища.
0
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115
16.09.2011, 15:25  [ТС]
Ну да, так я и понимаю ситуацию, мы с вами говорим об одном и том же. Json конвертер толкается от какой-то другой даты или может вообще не так делает. Поэтому я в него буду заталкивать вместо даты какой-нибудь long, где будет храниться числовое представление даты. Когда доберусь до рефакторинга этого участка кода, так и сделаю

Спасибо за помощь
0
3 / 3 / 1
Регистрация: 07.05.2014
Сообщений: 20
26.01.2016, 23:11
Если вы пользуетесь Angulajs, то есть решение на фильтрах. А так недавно подсмотрел такое вот решение. Если вы получили дату именно в таком формате, то скорее всего вы использовали C# ASP (MVC) и там формировали через Json(data);
Есть такое интересное решение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    public class JsonNetFilterAttribute : ActionFilterAttribute
    {
        private const string _dateFormat = "dd.MM.y";
 
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (filterContext.Result is JsonResult == false)
                return;
 
            filterContext.Result = new JsonNetResult((JsonResult)filterContext.Result);
        }
 
        private class JsonNetResult : JsonResult
        {
            public JsonNetResult(JsonResult jsonResult)
            {
                this.ContentEncoding = jsonResult.ContentEncoding;
                this.ContentType = jsonResult.ContentType;
                this.Data = jsonResult.Data;
                this.JsonRequestBehavior = jsonResult.JsonRequestBehavior;
                this.MaxJsonLength = jsonResult.MaxJsonLength;
                this.RecursionLimit = jsonResult.RecursionLimit;
            }
 
            public override void ExecuteResult(ControllerContext context)
            {
                if (context == null)
                    throw new ArgumentNullException("context");
 
                if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet
                    && String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
                    throw new InvalidOperationException("GET not allowed! Change JsonRequestBehavior to AllowGet.");
 
                var response = context.HttpContext.Response;
 
                response.ContentType = String.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
 
                if (this.ContentEncoding != null)
                    response.ContentEncoding = this.ContentEncoding;
 
                if (this.Data != null)
                {
                    var isoConvert = new IsoDateTimeConverter();
                    isoConvert.DateTimeFormat = _dateFormat;
                    response.Write(JsonConvert.SerializeObject(this.Data, isoConvert));
                }
            }
        }
    }
А перед функцией контроллера
C#
1
2
3
4
5
6
7
   
[JsonNetFilter]
public JsonResult View()
{
     ...
     return Json(Data, JsonRequestBehavior.AllowGet);
}
P.S. А вообще, как мне рекомендовали дату хранить в timestamp и передавать именно так через json и на сервер. Так правильнее всего, так как при обычном datetime формате траблы выскакивают с UTF. И трудно отслеживаемы при багах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2016, 23:11
Помогаю со студенческими работами здесь

Сериализация JSON
Здравствуйте! Допустим есть класс: public class Point2D { public double X, Y; private PluginStart Shell; public...

Сериализация JSON в C#
Доброго времени суток! Начал изучать сериализацию JSON и возникли некоторые недопонимания с моей стороны в плане изучения. Есть следующий...

Сериализация JSON
Привет! Прошу помощи, не могу понять, как собрать Json обратно. В общем изначально я получаю данные в таком виде: { ...

Сериализация JSON
Подскажите дураку как создать следующий JSON средствами QJsonArray QJsonObject QJsonDoument QJsonValue, не могу разобраться { ...

Сериализация JSON
Есть иерархия объектов, например такая: var gallery = {}; gallery.img = {name: "Logo", path: "C://", day: new Date()}; gallery.img1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru