Arhn - архитектура программирования

Передача дат Json методу действия в mvc

Следующий код развернут в Azure:

JavaScript:

    var _dp;

    $(function () {
        kendo.culture("en-GB");
        _dp = $("#modified").kendoDatePicker().data("kendoDatePicker");
    });

    function postData() {
        var data = {
            Modified: _dp.value()
        };
        $.ajax({
            type: "POST",
            data: JSON.stringify(data),
            contentType: 'application/json',
            url: "/location/edit",
            success: function (response) {
                log(response.modifedLocalDateTime);
                log(response.modifiedLocalKind);
                log(response.modifiedUtcDateTime);
                log(response.modifiedUtcKind);
            }
        });
    }

    function log(msg) {
        document.getElementById('divLog').innerHTML += "<br/>" + msg;
    }

Мой html

<input type="text" id="modified" />

<a href="javascript:postData();">postData</a>

<div id="divLog"></div>

Мой контроллер mvc

    [HttpPost]
    public ActionResult Edit(LocationViewModel item)
    {
        var modifiedUtc = item.Modified;
        var modifiedLocal = modifiedUtc.ToLocalTime();

        return Json(new
        {
            modifedLocalDateTime = modifiedLocal.ToString(),
            modifiedLocalKind = modifiedLocal.Kind.ToString(),
            modifiedUtcDateTime = modifiedUtc.ToString(),
            modifiedUtcKind = modifiedUtc.Kind.ToString()
        });
    }

public class LocationViewModel
{
    public int LocationId { get; set; }
    public string Name { get; set; }
    public DateTime Modified { get; set; }
}

Также стоит отметить, что в моем webapi.config есть:

        config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
        config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;

Теперь я выбираю дату, используя средство выбора даты кендо, скажем, 29 мая 2015 года, и нажимаю на данные публикации. Я получаю ответ на 1 час раньше, чем я просил. Не совсем то, что я ожидал. Мой регион — Великобритания, поэтому у нас британское летнее время, то есть UTC + 1.

Поэтому я ожидал, что даты будут переданы как UTC - глядя на скрипача, это выглядит так:

введите здесь описание изображения

Таким образом, веб-API должен получать дату в формате utc. Однако, глядя на вывод, веб-API получает 28 мая 2015 г., 23:00, а для свойства kind установлено значение local? Почему для свойства kind установлено значение utc - чего я и ожидал), так как в моем webapi.config я указал UTC... Так почему же так?

В настоящее время я получаю это

введите здесь описание изображения

Я хочу получить 29 мая 2015 года, а не 28 мая 2015 года в 23:00 в моем методе действия.

Как я могу это сделать?


  • Насколько я понимаю, отправка даты через веб-сервис любого типа будет преобразована в часовой пояс сервера. Итак, я бы отправил дату в виде строки обратно на сервер 17.05.2015

Ответы:


1

Вы передаете на сервер часовой пояс Зулу, то есть UTC, без смещения. . Сервер конвертирует его в свой часовой пояс. Таким образом, вы можете решить проблему двумя способами:

  • исправить клиента, чтобы он отправлял правильное смещение на сервер
  • отправить дату от клиента без смещения, чтобы он не вносил в нее никаких изменений

Для второго варианта вы можете использовать формат ISO, который выглядит так:

2015-05-17T13:32:00 // YYYY-MM-DD hh:mm:ss.ddddd

Этот формат всегда интерпретируется так, как ожидается, и, поскольку часовой пояс не указан, дата на сервере остается такой, какая она есть.

Вы можете использовать moment.js, чтобы помочь вам манипулировать датами перед отправкой их обратно на сервер.

17.05.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..