Visualizza il feed RSS

sspintux

Ordinamento per data con DataTables plug-in for jquery

Valuta questo inserimento
di pubblicato il 22-03-2015 alle 10:04 (2955 Visite)
Il plug.in questione è questo : https://www.datatables.net/.

Quando ordina , se non specificato, cerca di capire il tipo del dato per conto suo
o, in alternativa, si può indicare esplicitamente uno dei tipi supportati;
per esempio, si può indicare che la prima colonna è di tipo date:

codice:
$('#table_id')
	.DataTable(
		{
			"columnDefs" : [ {
				"type" : "date",
				"targets" : 0
			} ]
		});
... ma con date in questo formato : 01 febbraio 2015 che succede ?

Sul mio computer funziona con Chrome ma fallisce sia con IE che FF.

La soluzione, prendendo spunto da un suggerimento dato su stackoverflow
ed escludendo l'ordinamento lato server, è estendere la funzionalità Sort
del DataTable definendo un proprio type come segue:

codice:
$('#table_id')
	.DataTable(
		{
			"columnDefs" : [ {
				"type" : "date-it-estesa",
				"targets" : 0
			} ]
		});
codice:
-- TODO :  occorrerebbe gestire meglio il caso di data = null
function extendDTSort() {
	jQuery
		.extend(
				jQuery.fn.dataTableExt.oSort,
				{
					"date-it-estesa-pre" : function(a) {
						if ((typeof a === 'undefined') || (!a))
							return 0;

						var arM = {
							"gen" : "01",
							"feb" : "02",
							"mar" : "03",
							"apr" : "04",
							"mag" : "05",
							"giu" : "06",
							"lug" : "07",
							"ago" : "08",
							"set" : "09",
							"ott" : "10",
							"nov" : "11",
							"dic" : "12"
						};
						var itDatea = a.split(' ');
						if (itDatea.length != 3) {
							throw new Error(
									'extendDTSort : formato data non riconosciuto');
						}
						;
						var snM = arM[itDatea[1].substring(0, 3)
								.toLowerCase()];
						if (typeof snM === 'undefined' || (!snM)) {
							throw new Error(
									'extendDTSort : formato data non riconosciuto');
						}
						;
						if (itDatea[0].length != 2 || snM.length != 2
								|| itDatea[2].length != 4) {
							throw new Error(
									'extendDTSort : formato data non riconosciuto');
						}
						;
						snM = (itDatea[2] + snM + itDatea[0]) * 1;
						return snM;
					},

					"date-it-estesa-asc" : function(a, b) {
						return ((a < b) ? -1 : ((a > b) ? 1 : 0));
					},

					"date-it-estesa-desc" : function(a, b) {
						return ((a < b) ? 1 : ((a > b) ? -1 : 0));
					}
				});
}
HTH

aggiornamento da 22-03-2015 a 10:19 di sspintux

Categorie
Programmazione

Commenti