JQGrid 4.4.0: средство форматирования даты srcformat/newformat теперь пытается отформатировать дату, когда формат исходной даты не соответствует srcformat
У меня есть JQGrid, который имеет столбец даты. Я использую форматер даты для форматирования даты в m/d/Y
формат. Ранее, если формат исходной даты не соответствовал srcformat
Я прошел в formatoptions
, это просто не будет форматировать дату. JQGrid v4.4.0 теперь пытается отформатировать дату независимо от исходного формата, и предлагает даты, которые были отключены:-).
Даты, которые я заполняю в этом столбце, могут быть уже в правильном формате (m/d/Y
) или быть в формате, который я определил в srcformat
(Y-m-dTH:i:s
).
Есть ли способ в JQGrid 4.4.0 не пытаться анализировать даты, которые не соответствуют srcformat
?
Мой colModel def для столбца:
{name:"date", index:"date", label:"Date", width:85, jsonmap:"date", hidden: false, formatter:'date', sorttype: 'date', formatoptions:{srcformat:'Y-m-dTH:i:s', newformat:'m/d/Y'}, searchrules: { date: true } }
2 ответа
Я решил свою проблему:)
Я создал собственный форматировщик и использовал библиотеку Datejs JQuery, чтобы помочь в разборе даты.
В основном форматтер форматирует дату только в формат m/d/Y, если она имеет формат Ym-dTH:i:s; в противном случае он предполагает, что он уже находится в формате m/d/Y, и оставляет его.
/**
* This function formats the date column for the summary grid.
*
* The grid could be populated with dates that are in m/d/Y format or in Y-m-dTH:i:s format; need
* to account for this; want the dates to end up being in m/d/Y format always.
*
* @param cellvalue is the value to be formatted
* @param options an object containing the following element
* options : { rowId: rid, colModel: cm} where rowId - is the id of the row colModel is the object of the properties for this column getted from colModel array of jqGrid
* @param rowObject is a row data represented in the format determined from datatype option;
* the rowObject is array, provided according to the rules from jsonReader
* @return the new formatted cell value html
*/
function summaryGridDateFormatter(cellvalue, options, rowObject) {
// parseExact just returns 'null' if the date you are trying to
// format is not in the exact format specified
var parsedDate = Date.parseExact(cellvalue, "yyyy-MM-ddTHH:mm:ss");
// if parsed date is null, just used the passed cell value; otherwise,
// transform the date to desired format
var formattedDate = parsedDate ? parsedDate.toString("MM/dd/yyyy") : cellvalue;
return formattedDate;
}
@icats: спасибо за это! это действительно помогло - я начинал разочаровываться...
На самом деле мне пришлось немного изменить вашу функцию. Я получал поле метки времени из БД, которое возвращалось через JSON как значение в миллисекундах (то есть значение фактического было что-то вроде: 1343314489564). Поэтому я добавил вторую проверку для parsedDate, как показано ниже:
/**
* This function formats the date column for the grid.
*
* The grid could be populated with dates that are in m/d/Y format or in Y-m-dTH:i:s format; need
* to account for this; want the dates to end up being in m/d/Y format always.
*
* @param cellvalue is the value to be formatted
* @param options an object containing the following element
* options : { rowId: rid, colModel: cm} where rowId - is the id of the row colModel is the object of the properties for this column getted from colModel array of jqGrid
* @param rowObject is a row data represented in the format determined from datatype option;
* the rowObject is array, provided according to the rules from jsonReader
* @return the new formatted cell value html
*/
function dateFormatter(cellvalue, options, rowObject) {
// parseExact just returns 'null' if the date you are trying to
// format is not in the exact format specified
var parsedDate = Date.parseExact(cellvalue, "yyyy-MM-ddTHH:mm:ss");
if(parsedDate == null )
parsedDate = new Date(cellvalue);
// if parsed date is null, just used the passed cell value; otherwise,
// transform the date to desired format
var formattedDate = parsedDate ? parsedDate.toString("yyyy-MM-dd HH:mm:ss") : cellvalue;
return formattedDate;
}