CustomDate.js open-source JavaScript Date library

It’s a long time i made a post in the blog,I was completely busy working on a project where i should render the dynamic data into HTML and the data is in JSON format.. I started using JavaScript Templating (from JavaScript Micro-Templating) ref: JavaScript Micro-Templating.I will post a topic on JavaScript Templating in my next post, Here i am going to give you a JavaScript which i developed for my project. This script contain all useful functions of Date.

I made this script Open Source(GPL v3), please copy the below script in a file and name it as “CustomDate-1.0.js” and include in your HTML document as shown “<script type=”text/javascript” src=”js/CustomDate-1.0.js” >” and start using all the functions of the file.Netbeans > 7.x provide the API Assistance of the script once included into the project.

/**
 * @author Mantha Pavan Kumar
 * @version 1.0
 * 
 * @description 
 * Copyright (C) 2013 - 2014 SparkSoftware
 * 
 * This script is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 *
 */
var CustomDateObject = {
    /**
     * @returns {Date}
     * @description
     * Returns the current date as Date Object.
     */
    today: function() {
        return new Date();
    },
    /**
     * 
     * @returns {String}
     * Returns the current date as String date in the format 'mm/dd/yyyy'.
     */
    getSysDate: function() {
        var d = new Date();
        var strDate = (d.getMonth() + 1) + "/" + d.getDate() + "/"
                + d.getFullYear();
        // alert(strDate);
        return strDate;
    },
    /**
     * 
     * @param {type} date 
     * date parameter can be a date object or mm/dd/yyyy format.
     * @returns {String} The day of the date passed
     */
    getDay: function(date) {
        var d_names = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
        var l_date = new Date(date);
        return d_names[l_date.getDay()];
    },
    /**
     * 
     * @param {type} date
     * date parameter can be a date object or mm/dd/yyyy format.
     * @returns {String} The Month of the date passed
     */
    getMonth: function(date) {
        var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
        var l_date = new Date(date);
        return m_names[l_date.getMonth()];
    },
    /**
     * @description function under development.
     * @returns {undefined}
     */
    getDayNumberFromName: function() {

    },
    /**
     * 
     * @param {String} monthName
     * @description pass the month name as 'jan' | 'JAN' | 'january' | 'JANUARY'
     * @returns {Number}, The month number.
     */
    getMonthNumberFromName: function(monthName) {
        var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
        var month = "";
        if (monthName === "jan" || monthName === "JAN" || monthName === "january" || monthName === "JANUARY") {
            month = "Jan";
        } else if (monthName === "feb" || monthName === "FEB" || monthName === "february" || monthName === "FEBRUARY") {
            month = "Feb";
        } else if (monthName === "mar" || monthName === "MAR" || monthName === "MARCH" || monthName === "march") {
            month = "Mar";
        } else if (monthName === "apr" || monthName === "APR" || monthName === "april" || monthName === "APRIL") {
            month = "Apr";
        } else if (monthName === "may" || monthName === "MAY" || monthName === "May") {
            month = "May";
        } else if (monthName === "jun" || monthName === "JUN" || monthName === "june" || monthName === "JUNE") {
            month = "Jun";
        } else if (monthName === "jul" || monthName === "JUL" || monthName === "july" || monthName === "JULY") {
            month = "Jul";
        } else if (monthName === "aug" || monthName === "AUG" || monthName === "august" || monthName === "AUGUST") {
            month = "Aug";
        } else if (monthName === "sep" || monthName === "SEP" || monthName === "september" || monthName === "SEPTEMBER") {
            month = "Sep";
        } else if (monthName === "oct" || monthName === "OCT" || monthName === "october" || monthName === "OCTOBER") {
            month = "Oct";
        } else if (monthName === "nov" || monthName === "NOV" || monthName === "november" || monthName === "NOVEMBER") {
            month = "Nov";
        } else if (monthName === "dec" || monthName === "DEC" || monthName === "december" || monthName === "DECEMBER") {
            month = "Dec";
        }

        var monthNumber = m_names.indexOf(month);
        return monthNumber + 1;
    },
    /**
     * 
     * @param {number} year
     * @param {number} month
     * @returns {number} no of days in month
     * @description Pass the month and year in number format
     */
    getDaysInMonth: function(year, month) {
        return new Date(year, month, 0).getDate();
    },
    /**
     * 
     * @param {type} date, format{Date Object | 'mm/dd/yyyy'}
     * @returns {Array} of Start and End date of the week with respect to parameter passed
     * If date is null the function consider sysdate.
     */
    getStartandEndDates: function(date) {
        start = 0;
        if (date === undefined) {
            var today = new Date();
            var day = today.getDay() - start;
            var date = today.getDate() - day;

            var StartDate = new Date(today.setDate(date + 1));
            var EndDate = new Date(today.setDate(date + 5));
            var startingDate = (new Date(StartDate).getMonth() + 1) + "/" + new Date(StartDate).getDate() + "/" + new Date(StartDate).getFullYear();
            var endingDate = (new Date(EndDate).getMonth() + 1) + "/" + new Date(EndDate).getDate() + "/" + new Date(EndDate).getFullYear();
            return [startingDate, endingDate];
        } else {
            var today = new Date(date);
            var day = today.getDay() - start;
            var date = today.getDate() - day;

            var StartDate = new Date(today.setDate(date + 1));
            var EndDate = new Date(today.setDate(date + 5));
            var startingDate = (new Date(StartDate).getMonth() + 1) + "/" + new Date(StartDate).getDate() + "/" + new Date(StartDate).getFullYear();
            var endingDate = (new Date(EndDate).getMonth() + 1) + "/" + new Date(EndDate).getDate() + "/" + new Date(EndDate).getFullYear();
            return [startingDate, endingDate];
        }

    },
    /**
     * 
     * @param {type} date1 format: Date object | 'mm/dd/yyyy'
     * @param {type} date2 format: Date object | 'mm/dd/yyyy'
     * @returns {Number}
     * @description this function returns 1 if d1 > d2,-1 if d1 < d2
     * else returns 0 if d1 = d2
     */
    compareDates: function(date1, date2) {
        var d1 = new Date(date1).getTime();
        var d2 = new Date(date2).getTime();
        var result = 0;
        if (d1 < d2) {
            result = -1;
        } else if (d1 > d2) {
            result = 1;
        } else {
            result = 0;
        }
        return result;
    },
    /**
     * 
     * @param {type} date1 format: Date object | 'mm/dd/yyyy'
     * @param {type} date2 format: Date object | 'mm/dd/yyyy'
     * @returns {Number}
     * @description this function returns 0 if d1 = d2
     */
    isEqual: function(date1, date2) {
        var d1 = new Date(date1).getTime();
        var d2 = new Date(date2).getTime();
        var result = false;
        if (d1 === d2) {
            result = true;
        }
        return result;
    },
    /**
     * 
     * @param {number}
     * @returns {boolean} true | false
     * @description this function returns true | false
     */
    isLeapYear: function(year) {
        var days = new Date(year, 2, 0).getDate();
        if (days === 29) {
            return true;
        } else {
            return false;
        }
    },
    /**
     * 
     * @param {type} date
     * @returns {Date}
     * @description function takes date object or 'mm/dd/yyyy' as parameter and returns the next date of that.
     */
    nextDate: function(date) {
        var nextDate;
        nextDate = new Date(new Date(date).getFullYear(), new Date(date).getMonth(), new Date(date).getDate() + 1);
        if (date instanceof Date) {
            return nextDate;
        } else {
            return (new Date(nextDate).getMonth() + 1) + "/" + new Date(nextDate).getDate() + "/" + new Date(nextDate).getFullYear();
        }
    },
    /**
     * 
     * @param {type} date
     * @returns {Date}
     * @description function takes date object or 'mm/dd/yyyy' as parameter and returns the previous date of that.
     */
    previousDate: function(date) {
        var previousDate;
        previousDate = new Date(new Date(date).getFullYear(), new Date(date).getMonth(), new Date(date).getDate() - 1);
        if (date instanceof Date) {
            return previousDate;
        } else {
            return (new Date(previousDate).getMonth() + 1) + "/" + new Date(previousDate).getDate() + "/" + new Date(previousDate).getFullYear();
        }
    },
    /**
     * 
     * @param {type} pattern
     * @returns {undefined}
     * Sample : {'days':5,'months':2,'years':6,'date':new Date()} | {'days':5,'months':2,'years':6,'date':"mm/dd/yyyy"}
     */
    add: function(pattern) {

        days = pattern.days;
        months = pattern.months;
        years = pattern.years;
        date = pattern.date;

        var modifiedDate;

        if (date === undefined || date == "" || date == null) {
            alert("date is mandatory !");
        } else {
            if (days === undefined || months === undefined || years === undefined) {
                alert("nothing to add for given date !")
            } else {
                var temp_date = new Date(date);
                var temp_year = temp_date.getFullYear() + years;

                var yearChange = new Date(temp_year, temp_date.getMonth(), temp_date.getDate());
                var yearChange_monthChange = new Date(new Date(yearChange).getFullYear(), new Date(yearChange).getMonth() + months, new Date(yearChange).getDate());
                modifiedDate = new Date(new Date(yearChange_monthChange).getFullYear(), new Date(yearChange_monthChange).getMonth(), new Date(yearChange_monthChange).getDate() + days);

                return modifiedDate;
            }
        }
    },
    /**
     * 
     * @param {type} date
     * @param {type} noOfDays
     * @returns {Date}
     */
    addDays: function(date, noOfDays) {
        return new Date(new Date(date).getFullYear(), new Date().getMonth(), new Date(date).getDate() + noOfDays);
    },
    /**
     * 
     * @param {type} date
     * @param {type} noOfMonths
     * @returns {Date}
     */
    addMonths: function(date, noOfMonths) {
        return new Date(new Date(date).getFullYear(), new Date().getMonth() + noOfMonths, new Date(date).getDate());
    },
    /**
     * 
     * @param {type} date
     * @param {type} noOfyears
     * @returns {Date}
     */
    addYears: function(date, noOfyears) {
        return new Date(new Date(date).getFullYear() + noOfyears, new Date().getMonth(), new Date(date).getDate());
    },
    /**
     * 
     * @param {type} date | can be of a Date Object or 'mm/dd/yy' format
     * @returns {number} first date of the month
     */
    getFirstDayofMonth: function(date) {
        var x = new Date(date);
        var year = x.getFullYear();
        var month = x.getMonth();
        var day = x.getDate();

        var monthFirstDay = new Date(year, month, 1);
        return monthFirstDay;
    },
    /**
     * 
     * @param {type} date | can be of a Date Object or 'mm/dd/yy' format
     * @returns {number} last date of the month
     */
    getLastDayOfMonth: function(date) {

        var x = new Date(date);
        var year = x.getFullYear();
        var month = x.getMonth();
        var day = x.getDate();

        var monthLastDay = new Date(year + (month == 12 ? 1 : 0), (month == 1 ? 12 : month + 1), 0);
        return monthLastDay;
    }
};

Suggestions are welcome on the API.
soon source code will be available on Github …

Wait for my next post on JavaScript Templating
Happy Coding 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s