How to format a date in DataTable: $.fn.dataTable.render.moment does not work anymore
How to format a date in DataTable: $.fn.dataTable.render.moment does not work anymore
jstuardo
Posts: 104Questions: 41Answers: 0
Hello... I have updated my site to the latest DataTable plugin. After that, I cannot use $.fn.dataTable.render.moment because it does not work when calling
$.fn.dataTable.render.moment('', 'DD/MM/YYYY HH:mm:ss')
when rendering a cell.
In the old system, I have included a file called dataTables.datetime.js with this content:
/**
* Date / time formats often from back from server APIs in a format that you
* don't wish to display to your end users (ISO8601 for example). This rendering
* helper can be used to transform any source date / time format into something
* which can be easily understood by your users when reading the table, and also
* by DataTables for sorting the table.
*
* The [MomentJS library](http://momentjs.com/) is used to accomplish this and
* you simply need to tell it which format to transfer from, to and specify a
* locale if required.
*
* This function should be used with the `dt-init columns.render` configuration
* option of DataTables.
*
* It accepts one, two or three parameters:
*
* $.fn.dataTable.render.moment( to );
* $.fn.dataTable.render.moment( from, to );
* $.fn.dataTable.render.moment( from, to, locale );
*
* Where:
*
* * `to` - the format that will be displayed to the end user
* * `from` - the format that is supplied in the data (the default is ISO8601 -
* `YYYY-MM-DD`)
* * `locale` - the locale which MomentJS should use - the default is `en`
* (English).
*
* @name datetime
* @summary Convert date / time source data into one suitable for display
* @author [Allan Jardine](http://datatables.net)
* @requires DataTables 1.10+
*
* @example
* // Convert ISO8601 dates into a simple human readable format
* $('#example').DataTable( {
* columnDefs: [ {
* targets: 1,
* render: $.fn.dataTable.render.moment( 'Do MMM YYYYY' )
* } ]
* } );
*
* @example
* // Specify a source format - in this case a unix timestamp
* $('#example').DataTable( {
* columnDefs: [ {
* targets: 2,
* render: $.fn.dataTable.render.moment( 'X', 'Do MMM YY' )
* } ]
* } );
*
* @example
* // Specify a source format and locale
* $('#example').DataTable( {
* columnDefs: [ {
* targets: 2,
* render: $.fn.dataTable.render.moment( 'YYYY/MM/DD', 'Do MMM YY', 'fr' )
* } ]
* } );
*/
// UMD
(function (factory) {
"use strict";
if (typeof define === 'function' && define.amd) {
// AMD
define(['jquery'], function ($) {
return factory($, window, document);
});
} else if (typeof exports === 'object') {
// CommonJS
module.exports = function (root, $) {
if (!root) {
root = window;
}
if (!$) {
$ = typeof window !== 'undefined' ?
require('jquery') :
require('jquery')(root);
}
return factory($, root, root.document);
};
} else {
// Browser
factory(jQuery, window, document);
}
}
(function ($, window, document) {
$.fn.dataTable.render.moment = function (from, to, locale) {
// Argument shifting
if (arguments.length === 1) {
locale = 'en';
to = from;
from = 'YYYY-MM-DD';
} else if (arguments.length === 2) {
locale = 'es';
}
return function (d, type, row) {
if (!d)
return null;
var m = window.moment(d, from, locale, true);
// Order and type get a number value from Moment, everything else
// sees the rendered value
return m.format(type === 'sort' || type === 'type' ? 'x' : to);
};
};
}));
That does not work, maybe due to incompatibility issues with the old DataTable plugin. How can I do it now?
Thanks
This question has an accepted answers - jump to answer
Answers
All of the DateTime functionality was separated from Data Tables. Look for "DateTime" in the download builder and include that in your download, too.
If you are using "momentLocale" you might face another issue that should have been fixed in the nightly version but probably isn't fixed in the download builder version yet.