mambax7/alumni-26x

View on GitHub
media/jquery/tablesorter-master/js/parsers/parser-date-range.js

Summary

Maintainability
F
3 days
Test Coverage
/*! Parser: date ranges -updated 11/22/2015 (v2.24.6) */
/* Include the 'widget-filter-type-insideRange.js' to filter ranges */
/*jshint jquery:true */
;(function($){
    'use strict';

    var ts = $.tablesorter,
    getMonthVal,

    regex = {
        mdy        : /(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,

        dmy        : /(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,
        dmyreplace : /(\d{1,2})[-\s](\d{1,2})[-\s](\d{4})/,

        ymd        : /(\d{4}[-\s]\d{1,2}[-\s]\d{1,2}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,
        ymdreplace : /(\d{4})[-\s](\d{1,2})[-\s](\d{1,2})/,

        // extract out date format (dd MMM yyyy hms) e.g. 13 March 2016 12:55 PM
        overall_dMMMyyyy : /(\d{1,2}\s+\w+\s+\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s\w+)?)?)/g,
        matches_dMMMyyyy : /(\d{1,2})\s+(\w+)\s+(\d{4})/

    };

    /*! date-range MMDDYYYY *//* (2/15/2000 - 5/18/2000) */
    $.tablesorter.addParser({
        id: 'date-range-mdy',
        is: function () {
            return false;
        },
        format: function (text) {
            var date, str, i, len,
                parsed = [];
            str = text.replace( /\s+/g, ' ' ).replace( /[\/\-.,]/g, '-' ).match( regex.mdy );
            len = str && str.length;
            // work on dates, even if there is no range
            if ( len ) {
                for (i = 0; i < len; i++) {
                    date = new Date( str[i] );
                    parsed.push( date instanceof Date && isFinite(date) ? date.getTime() : str[i] );
                }
                // sort from min to max
                return parsed.sort().join( ' - ' );
            }
            return text;
        },
        type: 'text'
    });

    /*! date-range DDMMYYYY *//* (15/2/2000 - 18/5/2000) */
    $.tablesorter.addParser({
        id: 'date-range-dmy',
        is: function () {
            return false;
        },
        format: function (text) {
            var date, str, i, len,
                parsed = [];
            str = text.replace( /\s+/g, ' ' ).replace( /[\/\-.,]/g, '-' ).match( regex.dmy );
            len = str && str.length;
            if ( len ) {
                for (i = 0; i < len; i++) {
                    date = new Date( ( '' + str[i] ).replace( regex.dmyreplace, '$2/$1/$3' ) );
                    parsed.push( date instanceof Date && isFinite(date) ? date.getTime() : str[i] );
                }
                // sort from min to max
                return parsed.sort().join( ' - ' );
            }
            return text;
        },
        type: 'text'
    });

    /*! date-range DDMMYYYY *//* (2000/2/15 - 2000/5/18) */
    $.tablesorter.addParser({
        id: 'date-range-ymd',
        is: function () {
            return false;
        },
        format: function (text) {
            var date, str, i, len,
                parsed = [];
            str = text.replace( /\s+/g, ' ' ).replace( /[\/\-.,]/g, '-' ).match( regex.ymd );
            len = str && str.length;
            if ( len ) {
                for (i = 0; i < len; i++) {
                    date = new Date( ( '' + str[i] ).replace( regex.ymdreplace, '$2/$3/$1' ) );
                    parsed.push( date instanceof Date && isFinite(date) ? date.getTime() : str[i] );
                }
                // sort from min to max
                return parsed.sort().join( ' - ' );
            }
            return text;
        },
        type: 'text'
    });

    if ( !ts.dates ) { ts.dates = {}; }
    if ( !ts.dates.months ) { ts.dates.months = {}; }
    ts.dates.months.en = {
        // See http://mottie.github.io/tablesorter/docs/example-widget-grouping.html
        // for details on how to use CLDR data for a locale to add data for this parser
        // CLDR returns an object { 1: "Jan", 2: "Feb", 3: "Mar", ..., 12: "Dec" }
        1 : 'Jan',
        2 : 'Feb',
        3 : 'Mar',
        4 : 'Apr',
        5 : 'May',
        6 : 'Jun',
        7 : 'Jul',
        8 : 'Aug',
        9 : 'Sep',
        10: 'Oct',
        11: 'Nov',
        12: 'Dec'
    };

    getMonthVal = function( str, c, cellIndex ) {
        var m, month,
            // add options to 'config.globalize' for all columns --> globalize : { lang: 'en' }
            // or per column by using the column index --> globalize : { 0 : { lang: 'fr' } }
            options = c.globalize && ( c.globalize[ cellIndex ] || c.globalize ) || {},
            months = ts.dates.months[ options.lang || 'en' ];
        if ( c.ignoreCase ) {
            str = str.toLowerCase();
        }
        for ( month in months ) {
            if ( typeof month === 'string' ) {
                m = months[ month ];
                if ( c.ignoreCase ) {
                    m = m.toLowerCase();
                }
                if ( str.match( m ) ) {
                    return parseInt( month, 10 );
                }
            }
        }
        return str;
    };

    /*! date-range "dd MMM yyyy - dd MMM yyyy" *//* ( hms optional )*/
    ts.addParser({
        id: 'date-range-dMMMyyyy',
        is: function () {
            return false;
        },
        format: function( text, table, cell, cellIndex ) {
            var date, month, matches, i,
                parsed = [],
                str = text.replace( /\s+/g, ' ' ).match( regex.overall_dMMMyyyy ),
                len = str && str.length;
            if ( len ) {
                for ( i = 0; i < len; i++ ) {
                    date = '';
                    matches = str[ i ].match( regex.matches_dMMMyyyy );
                    if ( matches && matches.length >= 4 ) {
                        matches.shift();
                        month = getMonthVal( matches[1], table.config, cellIndex );
                        if ( !isNaN( month ) ) {
                            str[i] = str[i].replace( matches[1], month );
                        }
                        date = new Date( ( '' + str[ i ] ).replace( ts.regex.shortDateXXY, '$3/$2/$1' ) );
                    }
                    parsed.push( date instanceof Date && isFinite(date) ? date.getTime() : str[i] );
                }
                // sort from min to max
                return parsed.sort().join( ' - ' );
            }
            return text;
        },
        type: 'text'
    });

})(jQuery);