ExtJS: отправить дату в отдельном формате - PullRequest
3 голосов
/ 04 февраля 2012

Я использую ExtJS v4.0.

Сохранение формата даты между клиентом и сервером действительно сбивает с толку.

Пользователи хотят иметь свои собственные форматы ввода, но сервер обычно требует, чтобы представление было одним стандартным форматом.

Это должна быть встроенная реализация в ExtJS, но это не так.

Я прочитал некоторые решения по этой проблеме, но они пытаются решить только форматирование DateField (путем создания специального плагина DateField или расширения SubmitAction).

Я ищу глобальное решение для форматирования всех дат, которые могут быть отправлены (сетка / хранилище, форма / поле даты и т. Д.).

Таким образом, даты могут иметь собственный формат отображения в соответствии с локалью, но они будут представлены в одном стандартном формате (например, гггг-мм-дд).

Есть предложения по этой проблеме?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 06 июня 2015

Это был единственный рабочий ответ, который я нашел из документации, использующей версию 4.2.1

    Ext.Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
};


//allow max date as today
Ext.override(Ext.form.DateField, {
    submitFormat:Ext.Date.patterns.ISO8601Short
});
0 голосов
/ 21 февраля 2012

Я не знаю универсального, однажды внедрите его в свой код, какое-то решение для этого. Но вы можете написать функцию, которая будет перебирать объект структуры. Вроде как это говорит о в конце Ext.Date вводного объекта в документах . Вам определенно нужно было бы добавить больше шаблонов, и вы должны реализовать их индивидуально там, где вы хотели, например: для создателя магазина вы могли бы использовать его в событии beforesync, но для поля даты вы бы поместили его в качестве функции валидатора. Я использовал такую ​​функцию в разных местах, чтобы пользователи не были привязаны к определенному шаблону даты, функция:

function reallyParse(aDate) {
    Ext.Array.each(Ext.Date.patterns, function(pattern) {
        aDate = Ext.Date.parse(aDate, pattern)
        return aDate === null;
    });
    if (myDate !== null) {
        return false
    } else {
        // format it the way your server wants it
        return Ext.Date.format(myDate, Ext.Date.patterns.ISO8601Long)
    }
}

Конкретная цитата из документов, о которых я говорю, такова:

Вот некоторые стандартные шаблоны даты / времени, которые могут вам пригодиться. Они не являются частью источника Ext.Date, но использовать их вы можете просто скопируйте этот блок кода в любой скрипт, который включен после Ext.Date, и они также станут доступны по всему миру на Дате объект. Не стесняйтесь добавлять или удалять шаблоны по мере необходимости в вашем коде.

Ext.Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
};

Пример использования:

var dt = new Date();
console.log(Ext.Date.format(dt, Ext.Date.patterns.ShortDate));

Пользовательские форматы, написанные разработчиком, могут использоваться как форматирование и функция разбора, которые выполняют специализированные требования. Функции хранятся в parseFunctions и formatFunctions.

Как я уже сказал, вам придется добавить к их шаблонам объект, и реализация будет зависеть от того, где вы его используете, но вот как я это делаю.

...