[英]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.