0

I need to convert a JS date object to a php Y-m-d string using javascript as this value will be inserted in a mysql datetime data type. The code below does the trick but it's messy, any alternatives?

var jsDateObj = new Date,
phpYear = jsDateObj.getFullYear(),
phpMonth = jsDateObj.getMonth() + 1,
phpDate = jsDateObj.getDate(),
phpDate = phpYear + "-" + (10 > phpMonth ? "0" + phpMonth : phpMonth) + "-" + (10 > phpDate ? "0" + phpDate : phpDate);
console.log(phpDate); // 2015-10-02
1
  • considering all you're essentially doing is sending in a string anyway, this is about right. Commented Oct 2, 2015 at 19:30

1 Answer 1

1

For this I had created a function.

Program:

/**
* A javascript function which behaves like date function PHP
*
* Here we have left some options
*
* Arguments: 
*  <format>: Format in which date needed
*  <dateObj>; Date object( optional,if its not given then it returns today's date)
*  
* Return Type: String
*/
function date(format, dateObj) {

    // If user has not given date obj,
    // then provide the today's date.
    if (dateObj) {
        dateObj = new Date();
    }

    /*************************************
    *   CONFIGURATION VARIABLES          *
    **************************************/
    var shortDays  = ['Sun',     'Mon',       'Tue',     'Wed',       'Thu',      'Fri',    'Sat'];
    var fullDays   = ['Sunday',  'Monday',    'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    var monthNames = ['January', 'February',  'March',   'April',     'May',      'June',   'July',   'August', 'September', 'October', 'November', 'December'];
    var shortMonth = ['Jan',     'Feb',       'Mar',     'Apr',       'May',      'Jun',    'Jul',    'Aug',    'Sep',       'Oct',     'Nov',      'Dec'];

    var formatArr = format.split("");

    /*******************************************
    * HELPER FUNCTIONS                         *
    ********************************************/

    /**
    * Function to convert a single digit number into
    * two digit string.
    *
    * Arguments: 
    *  <num>: which will be converted into two digit.
    *  
    * Return Type: String
    */
    function twoDigit(num) {
        num = num.toString();
        return (num.length == 1) ? '0' + num : num;
    }

    /**
    * Function to check wheather a given year is leap year or not 
    *
    * Arguments: 
    *  <year>: year which will be tested
    *  
    * Return Type: true:  or false
    */
    function isLeapYear(year) {
        return  ( year%4) ? false : ((year % 100) ? true : (year % 400) ? false : true);
    }

    /**
    * Function to return suffix like st 2nd
    *
    * Arguments: 
    *  <num>: number
    *  
    * Return Type: String
    */
    function suffix(num) {
        num = parseInt(num);
        if (num >= 10 && num <=20 ) {
            return 'th';
        }

        num = ((num.toString()).length >= 2) ? parseInt((num.toString())[(num.toString()).length - 1]) : num;

        switch(num) {
            case 0: return 'th'; 
            case 1: return 'st';
            case 2: return 'nd';
            case 3: return 'rd';
            case 4: return 'th';
            case 5: return 'th';
            case 6: return 'th';
            case 7: return 'th';
            case 8: return 'th';
            case 9: return 'th';
        }
    }

    // Main logic starts from here.
    var dateStr = '';
    for (var i = 0;  i < formatArr.length; i++) {
        switch(formatArr[i]) {

            case 'd': // The day of the month (from 01 to 31)
                      dateStr += '' + twoDigit(dateObj.getDate());
                      break;

            case 'D': // A textual representation of a day (three letters)
                      dateStr += '' + shortDays[dateObj.getDay()];
                      break;

            case 'j': // The day of the month without leading zeros (1 to 31)
                      dateStr += '' + dateObj.getDate();
                      break;

            case 'l': // A full textual representation of a day
                      dateStr += '' + fullDays[dateObj.getDay()];
                      break;

            case 'N':
            case 'S': // The English ordinal suffix for the day of the month (2 characters st, nd, rd or th. Works well with j)
                      dateStr += '' + suffix(dateObj.getDate());
                      break;

            case 'w': // A numeric representation of the day (0 for Sunday, 6 for Saturday)
                      dateStr += '' + dateObj.getDay();
                      break;

            case 'z':
            case 'W':

            case 'F': // A full textual representation of a month (January through December)
                      dateStr += '' + monthNames[dateObj.getMonth()];
                      break;

            case 'm': // A numeric representation of a month (from 01 to 12)
                      dateStr += '' + twoDigit(dateObj.getMonth() + 1);
                      break;

            case 'M': // A short textual representation of a month (three letters)
                      dateStr += '' + shortMonth[dateObj.getMonth()];
                      break;

            case 'n': // A numeric representation of a month, without leading zeros (1 to 12)
                      dateStr += '' + (dateObj.getMonth() + 1);
                      break;

            case 't': // The number of days in the given month
                      switch(dateObj.getMonth()) {
                        case 0: dateStr += '' + 31; break;
                        case 1: dateStr += '' + ((isLeapYear(dateObj.getFullYear())) ? 29 : 28 ); break;
                        case 2: dateStr += '' + 31; break;
                        case 3: dateStr += '' + 30; break;
                        case 4: dateStr += '' + 31; break;
                        case 5: dateStr += '' + 30; break;
                        case 6: dateStr += '' + 31; break;
                        case 7: dateStr += '' + 31; break;
                        case 8: dateStr += '' + 30; break;
                        case 9: dateStr += '' + 31; break;
                        case 10: dateStr += '' + 30; break;
                        case 11: dateStr += '' + 31; break;
                      }
                      break;

            case 'L': // Whether it's a leap year (1 if it is a leap year, 0 otherwise)
                      dateStr += '' + (isLeapYear(dateObj.getFullYear()) ? 1:0);
                      break;

            case 'o':

            case 'Y': // A four digit representation of a year
                       dateStr += '' + dateObj.getFullYear();
                       break;

            case 'y': // A two digit representation of a year
                      dateStr += '' + (dateObj.getFullYear().toString()).substring(2,4);
                      break;

            case 'a': // Lowercase am or pm
                      dateStr += '' + (dateObj.getHours() >= 12) ? 'pm' : 'am';
                      break;

            case 'A': // Uppercase AM or PM
                      dateStr += '' + (dateObj.getHours() >= 12) ? 'PM' : 'AM';
                      break;

            case 'B':

            case 'g': // 12-hour format of an hour (1 to 12)
                      dateStr += '' + ((dateObj.getHours() > 12 || dateObj.getHours() == 0) ?  Math.abs(dateObj.getHours() - 12) : dateObj.getHours());
                      break;

            case 'G': // 24-hour format of an hour (0 to 23)
                      dateStr += '' + dateObj.getHours();
                      break;

            case 'h': // 12-hour format of an hour (01 to 12) 
                      dateStr += '' + twoDigit(((dateObj.getHours() > 12 || dateObj.getHours() == 0) ?  Math.abs(dateObj.getHours() - 12) : dateObj.getHours()));
                      break;

            case 'H': // 24-hour format of an hour (00 to 23)
                      dateStr += '' + twoDigit(dateObj.getHours());
                      break;

            case 'i': // Minutes with leading zeros (00 to 59)
                      dateStr += '' + twoDigit(dateObj.getMinutes());
                      break;

            case 's': // Seconds, with leading zeros (00 to 59)
                      dateStr += '' + twoDigit(dateObj.getSeconds());
                      break;

            case 'e':
            case 'I':
            case 'O':
            case 'P':
            case 'T':
            case 'Z':
            case 'c':
            case 'r':
            case 'U': // The seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
                      dateStr += '' + Date.parse(dateObj.toString());
                      break;

            default: dateStr += formatArr[i];;
                     break;
        }
    }


    return  dateStr;
}


// doc:
// Availabe PHP formats
/************************
-- d - The day of the month (from 01 to 31)
-- D - A textual representation of a day (three letters)
-- j - The day of the month without leading zeros (1 to 31)
-- l (lowercase 'L') - A full textual representation of a day
N - The ISO-8601 numeric representation of a day (1 for Monday, 7 for Sunday)
-- S - The English ordinal suffix for the day of the month (2 characters st, nd, rd or th. Works well with j)
-- w - A numeric representation of the day (0 for Sunday, 6 for Saturday)
z - The day of the year (from 0 through 365)
W - The ISO-8601 week number of year (weeks starting on Monday)
-- F - A full textual representation of a month (January through December)
-- m - A numeric representation of a month (from 01 to 12)
-- M - A short textual representation of a month (three letters)
-- n - A numeric representation of a month, without leading zeros (1 to 12)
-- t - The number of days in the given month
-- L - Whether it's a leap year (1 if it is a leap year, 0 otherwise) 
-- Y - A four digit representation of a year
-- y - A two digit representation of a year
-- a - Lowercase am or pm
-- A - Uppercase AM or PM 
-- g - 12-hour format of an hour (1 to 12)
-- G - 24-hour format of an hour (0 to 23)
-- h - 12-hour format of an hour (01 to 12)
-- H - 24-hour format of an hour (00 to 23)
-- i - Minutes with leading zeros (00 to 59)
-- s - Seconds, with leading zeros (00 to 59)
e - The timezone identifier (Examples: UTC, GMT, Atlantic/Azores)
I (capital i) - Whether the date is in daylights savings time (1 if Daylight Savings Time, 0 otherwise)
O - Difference to Greenwich time (GMT) in hours (Example: +0100)
P - Difference to Greenwich time (GMT) in hours:minutes (added in PHP 5.1.3)
T - Timezone abbreviations (Examples: EST, MDT)
Z - Timezone offset in seconds. The offset for timezones west of UTC is negative (-43200 to 50400)
c - The ISO-8601 date (e.g. 2013-05-05T16:34:42+00:00)
r - The RFC 2822 formatted date (e.g. Fri, 12 Apr 2013 12:01:05 +0200)
-- U - The seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
==========================================================================
January - 31 days
February - 28 days; 29 days in Leap Years
March - 31 days
April - 30 days
May - 31 days
June - 30 days
July - 31 days
August - 31 days
September - 30 days
October - 31 days
November - 30 days
December - 31 days
*************************/

How to use:

var date = date("Y-m-d", new Date('205-09-09'));

If you are not passing date object then by default it will return today's date.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.