Tuesday, 19 April 2016

UTC to Local date injector in Angular JS

Myservice.factory('dateintercepter', function () {
    return {
        request: function (config) {
            return config;
        },

        requestError: function (config) {
            return config;
        },

        response: function (res) {
            if (typeof (res.data) == "object") {
                if (res.data) {
                    if (res.data.length) {
                        angular.forEach(res.data, function (val, key) {
                            if (typeof (val) == "object") {
                                if (val) {
                                    if (val.length) {
                                        angular.forEach(val, function (val1, key1) {
                                            for (var prop in val1) {
                                                dateUTC.checkNested(prop, val1);
                                            }
                                        })
                                    }
                                    else {
                                        for (var prop in val) {
                                            dateUTC.checkNested(prop, val);
                                        }
                                    }
                                }
                            }
                        })
                    }
                    else {
                        for (var prop in res.data) {
                            dateUTC.checkNested(prop, res.data);
                        }
                    }
                }
            }
            return res;
        },

        responseError: function (res) {
            return res;
        },

    }
});
appModule.config(['$httpProvider', function ( $httpProvider) {
    $httpProvider.interceptors.push('dateintercepter');
}]);


//Namespace
var dateUTC = {};
dateUTC.checkNested = function (prop, val1) {
    //check for string
    if (typeof (val1[prop]) == "string") {
        if (isNaN(val1[prop])) {
            if (dateUTC.checkISOdate(val1[prop])) {
                val1[prop] = moment(moment.utc(val1[prop]).toDate()).format();
            }
        }
    }
    //check for object
    if (typeof (val1[prop]) == "object") {
        //start loop for array
        for (var prp in val1[prop]) {
            if (typeof (val1[prop][prp]) == "string") {
                if (dateUTC.checkISOdate(val1[prop][prp])) {
                    val1[prop][prp] = moment(moment.utc(val1[prop][prp]).toDate()).format();
                }
            }
            if (typeof (val1[prop][prp]) == "object") {
                //start loop for nested object
                for (var pr in val1[prop][prp]) {
                    if (typeof (val1[prop][prp][pr]) == "string") {
                        if (isNaN(val1[prop][prp][pr])) {
                            if (dateUTC.checkISOdate(val1[prop][prp][pr])) {
                                val1[prop][prp][pr] = moment(moment.utc(val1[prop][prp][pr]).toDate()).format();
                            }
                        }
                    }
                    if (typeof (val1[prop][prp][pr]) == "object") {
                        for (var p in val1[prop][prp][pr]) {
                            dateUTC.checkNested(p, val1[prop][prp][pr]);
                        }
                    }
                }
            }
        }
    }
};
dateUTC.checkISOdate = function (date) {
    if (moment(date, "YYYY-MM-DDTHH:mm:ss.SSS", true).isValid()
        || moment(date, "YYYY-MM-DDTHH:mm:ss.SS", true).isValid()
        || moment(date, "YYYY-MM-DDTHH:mm:ss.S", true).isValid()
        || moment(date, "YYYY-MM-DDTHH:mm:ss", true).isValid()) {
        return true;
    }
    return false;
}

No comments:

Post a Comment