JSON date получает неправильную дату - PullRequest
1 голос
/ 13 мая 2011

Я использую JQUERY ajax для вызова метода MVC:

Jquery:

$.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Home/GetApplication/" + id,
            dataType: "json",
            data: '',
            timeout: 10000,
            success: function (obj) {

                $('#Name').val(obj.Name);
                $('#ApplicationIdentifier').val(obj.ApplicationIdentifier);
                $('#Frequency').val(obj.FrequencyValue);
                var d = new Date(parseInt(obj.BaseDate.substr(6)));
                $('#BaseDate').val(d.getMonth() + '/' + d.getDay() + '/' + d.getFullYear());

            },
            error: function () {
                return;
            }
        });

Метод MVC:

[HttpPost]
        public ActionResult GetApplication(int id)
        {
            return Json(new Application
                            {
                                Name = "Testing",
                                ApplicationIdentifier = "123ABC",
                                FrequencyValue = 1,
                                FrequencyType = 1,
                                BaseDate = DateTime.Now
                            });
        }

Все это прекрасно работает, за исключением даты, указанной в моей форме 5/5/2011, и это должно быть 13.05.2011. Я что-то здесь упускаю? Спасибо.

Ответы [ 4 ]

1 голос
/ 13 мая 2011

getMonth () возвращает 0-11;getDay () получает день недели !

1 голос
/ 13 мая 2011

getMonth() возвращает значение от 0 до 11, поэтому просто добавьте 1 ( source ).

1 голос
/ 13 мая 2011

Работа с датами и временем между JavaScript и .NET может быть затруднена, и мы обычно обрабатываем это в наших приложениях, всегда делая взаимодействие в Unix Time:

[HttpPost]
public ActionResult GetApplication(int id)
{
    DateTime unixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);

    return Json(new Application
        {
            Name = "Testing",
            ApplicationIdentifier = "123ABC",
            FrequencyValue = 1,
            FrequencyType = 1,
            BaseDate = (DateTime.Now - unixTime).TotalMilliseconds
         });
}

Теперь, когда ваше приложение JavaScript имеетUnix Time, его можно легко преобразовать в Date (вы также неправильно форматируете строку даты):

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/Home/GetApplication/" + id,
    dataType: "json",
    data: '',
    timeout: 10000,
    success: function (obj) {
        var d = new Date(obj.BaseDate);
        var dateString = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();

        $('#Name').val(obj.Name);
        $('#ApplicationIdentifier').val(obj.ApplicationIdentifier);
        $('#Frequency').val(obj.FrequencyValue);
        $('#BaseDate').val(dateString);
    },
    error: function () {
        return;
    }
});

Кроме того, я бы не стал возвращать вашу сущность EF во внешний интерфейс, только передавал еечто это действительно нужно.Используя объект dynamic, ваши типы могут быть выведены здесь, и BaseDate становится любым типом, который вы ему дадите:

[HttpPost]
public ActionResult GetApplication(int id)
{
    DateTime unixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);

    return Json(new { 
            Name = "Testing",
            ApplicationIdentifier = "123ABC",
            FrequencyValue = 1,
            BaseDate = (DateTime.Now - unixTime).TotalMilliseconds
         });
}
0 голосов
/ 13 мая 2011

То, как я превращаю \/Date(1234567889)\/ в дату, которую может использовать javascript, таково: obj.BaseDate.slice(6, obj.BaseDate.length - 2);

Сериализация даты в Microsoft приводит к появлению строки, поэтому вам нужно удалить все, кроме числа.

Вся эта строка станет var d = new Date(parseInt(obj.BaseDate.slice(6, obj.BaseDate.length - 2)));

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