使用jQuery日期选择器的日期选择器的格式Im为这个08/25/2012
插入到我的数据库时,我有错误,它只能插入0000-00-00 00 00 00
我的代码是
<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>
我确定我的插入是正确的....
由于在规定的日期和时间文字 :
MySQL的确认DATE
在这些格式值:
如在一个字符串'YYYY-MM-DD'
或'YY-MM-DD'
格式。 A“宽松的”语法被允许:任何标点字符可以被用作日期部分之间的分隔符。 例如, '2012-12-31'
'2012/12/31'
'2012^12^31'
和'2012@12@31'
是等同的。
如同在任何没有分隔符的字符串'YYYYMMDD'
或'YYMMDD'
格式,只要该字符串是有意义的日期。 例如, '20070523'
和'070523'
被解释为'2007-05-23'
,但'071332'
是不合法的(它有无意义的月和日),成为'0000-00-00'
。
如在一个数字YYYYMMDD
或YYMMDD
格式,只要该数是有意义的日期。 例如, 19830905
和830905
被解释为'1983-09-05'
。
因此,字符串'08/25/2012'
不是一个有效的MySQL日期文字。 您有四个选项(按优先一些模糊的秩序,没有你的要求任何进一步的信息):
配置日期选择器提供在使用支持的格式日期altField
连同其altFormat
选项 :
<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
或者,如果你很高兴为用户看到日期YYYY-MM-DD
格式,只需将dateFormat
选项 ,而不是:
$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
使用MySQL的STR_TO_DATE()
函数将字符串转换:
INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
从转换的jQuery接收到的东西,PHP懂得作为一个日期,如一个字符串DateTime
对象:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
然后或者:
获得合适的格式化的字符串:
$date = $dt->format('Ym-d');
获得UNIX时间戳:
$timestamp = $dt->getTimestamp();
然后将其直接传递给MySQL的FROM_UNIXTIME()
函数:
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
手动操纵串入一个有效的文字:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
警告
您的代码很容易受到SQL注入。 你真的应该使用预处理语句 ,你通过你的变量为不得到SQL评估参数成。 如果你不知道我在说什么,或者如何解决它,阅读的故事鲍比表 。
此外,如在规定的出台对PHP手册章mysql_*
功能:
这个扩展不赞成PHP 5.5.0,并且不建议用于编写新的代码,因为它会在将来被移除。 相反,无论是库MySQLi或PDO_MYSQL应使用扩展。 又见MySQL的API概述了进一步的帮助,而选择一个MySQL API。
你似乎是使用一个DATETIME
或TIMESTAMP
列用于保存日期值; 我建议你考虑使用MySQL的DATE
类型来代替。 正如上文中DATE
, DATETIME
和TIMESTAMP
类型 :
该DATE
类型用于与日期部分,但没有时间部分的值。 MySQL的检索并在显示DATE值'YYYY-MM-DD'
格式。 支持范围为'1000-01-01'
到'9999-12-31'
。
的DATETIME
类型用于同时包含日期和时间部分的值。 MySQL的检索和显示DATETIME
中值'YYYY-MM-DD HH:MM:SS'
格式。 支持范围为'1000-01-01 00:00:00'
到'9999-12-31 23:59:59'
。
所述TIMESTAMP
数据类型用于同时包含日期和时间部分的值。 TIMESTAMP
有一系列的'1970-01-01 00:00:01'
,以UTC '2038-01-19 03:14:07'
UTC。
您应该考虑从该日起witk创建时间戳mktime()
例如:
$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
$date_field = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());
你必须确保日期格式为YYYY-MM-DD您的jQuery输出。 我能看到的jQuery返回MM-DD-YYYY,这不是有效的MySQL日期格式 ,这就是为什么它返回一个错误。
将其转换为正确的,你可以这样做:
$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];
那么你会得到格式化的日期,这将是有效的MySQL格式,这是YYYY-MM-DD,即2012-08-25
我也建议使用mysql_real_escape_string作为将数据插入到数据库,以防止SQL注入作为一个快速的解决方案或更好地利用PDO和库MySQLi 。
使用你的插入查询mysql_real_escape_string
而应是这样的:
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
最简单的方法是
$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];
$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());
使用Get从jQuery日期选择器日期对象
var myDate = $('element').datepicker('getDate')
MySQL的日期必须以正确的格式。 它处理任何时区问题的一种选择是使用moment.js
moment(myDate).format('YYYY-MM-DD HH:mm:ss')
尝试这样的事情..
echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);
首先商店$date=$_POST['your date field name'];
insert into **Your_Table Name** values('$date',**other fields**);
您必须包含日期单科特(”“)
我希望它可以帮助。