1

日付列を持つ 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 定義:

{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 } }        
4

2 に答える 2

2

私は自分の問題を解決しました:)

カスタム フォーマッタを作成し、Datejs JQuery ライブラリを使用して日付の解析を支援しました。

基本的に、フォーマッターは、日付が Ym-dTH:i:s 形式の場合にのみ、日付を m/d/Y 形式にフォーマットします。それ以外の場合は、既に 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;
}
于 2012-07-10T22:04:21.290 に答える
0

@icats: ありがとう!それは本当に役に立ちました-私はかなりイライラし始めていました...

私は実際にあなたの機能を少し変更しなければなりませんでした。DB からタイムスタンプフィールドを取得していましたが、これは JSON を介してミリ秒単位の値として返されました(つまり、実際の値は 1343314489564 のようなものでした)。したがって、次のように、parsedDate の 2 番目のチェックを追加しました。

/**
 * 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;
}
于 2012-07-31T13:20:25.953 に答える