简体   繁体   English

使用JavaScript将Javascript日期对象转换为php Ymd字符串

[英]Convert Javascript date object to php Y-m-d string using javascript

I need to convert a JS date object to a php Ymd string using javascript as this value will be inserted in a mysql datetime data type. 我需要使用javascript将JS日期对象转换为php Ymd字符串,因为此值将插入到mysql datetime数据类型中。 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

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. 如果您不传递日期对象,则默认情况下它将返回今天的日期。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM