/** * 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+, Moment.js 1.7+ * * @example * // Convert ISO8601 dates into a simple human readable format * $('#example').DataTable( { * columnDefs: [ { * targets: 1, * render: $.fn.dataTable.render.moment( 'Do MMM YYYY' ) * } ] * } ); * * @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 = 'en'; } return function ( d, type, row ) { if (! d) { return type === 'sort' || type === 'type' ? 0 : d; } 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 ); }; }; }));