Как сделать поля даты и времени нейтральными по отношению к часовому поясу при использовании Javascript для установки / получения значения - PullRequest
0 голосов
/ 23 февраля 2012

В моем проекте есть несколько полей типа datetime, например дата и время вылета / прилета рейса, которые должны совпадать, когда пользователь их редактирует.

Я использую ASP.NET MVC3 и dojo для создания приложения.В конце я могу обработать данное значение как время UTC и сохранить его в БД.Но когда он передается во внешний интерфейс с помощью Json, Javascript, похоже, настраивает его на местное время, а средство выбора даты / времени на странице показывает скорректированное значение.Кажется, когда я использую новую дату (...), он автоматически настраивается на местное время.

Ниже приведена функция синтаксического анализа, которую я использую на странице (потому что JsonRest в ASP.NET MVC3 возвращает дату типа "/Date(464371200000)/").

function (/*string*/dateStr) {
        if (!dateStr) {
            return dateStr;
        }
        var jsonResultPattern = /Date\([+-]?(\d+)\)/;
        if (dateStr.match(jsonResultPattern)) {
            return new Date(parseInt(dateStr.substr(6)));
        }
        else {
            return dateStr;
        }
    },

Как я могу реализовать этодело?Есть ли лучшая практика или пример?

1 Ответ

1 голос
/ 23 февраля 2012

Измените возврат на следующий для времени UTC:

return new Date(parseInt(dateStr.substr(6))).toUTCString();

Все даты в javascript хранятся внутри UTC. Если вы хотите, чтобы функция возвращала объект фактической даты, и вы используете в своем виджете определенные методы, такие как getFullYear(), она преобразует его в местное время. Если вы хотите сохранить его в UTC, вы должны использовать методы UTC, такие как:

dateObj.getUTCFullYear();          // Year as a 4-Digit Number
dateObj.getUTCMonth();             // Month as a number from 0 - 11
dateObj.getUTCDate();              // Day of the Month as a number from 1 - 31
dateObj.getUTCDay();               // Day of the Week as a number from 0 - 6
dateObj.getUTCHours();             // Hours as a number from 0 - 23
dateObj.getUTCMinutes();           // Minutes as a number from 0 - 59
dateObj.getUTCSeconds();           // Seconds as a number from 0 - 59
dateObj.getUTCMilliseconds();      // Milliseconds as a number from 0 - 999
dateObj.toUTCString();             // The entire Date as a string in UTC

Если вы хотите установить объект, используйте те же методы, что и выше, но измените слово get для установки (например, - dateObj.setUTCFullYear(1984);).

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