将phpdate转换为mysql格式
我有一个使用此代码的PHPdate字段:
$date = mysql_real_escape_string($_POST['intake_date']);
如何将其转换为MySql格式,以便包含在数据库中。 是否符合:date('Ymd'strtotime($ date);我之所以问这个问题,是因为我尝试过这种变化,而且我似乎无法使它工作,或者显示为1970或其他变体非常感谢
$date = mysql_real_escape_string($_POST['intake_date']);
1.如果你的MySQL列是DATE
types:
$date = date('Ym-d', strtotime(str_replace('-', '/', $date)));
2.如果你的MySQL列是DATETIME
types:
$date = date('Ymd H:i:s', strtotime(str_replace('-', '/', $date)));
你没有工作strototime()
,因为它不会使用破折号分隔符,它会尝试做一个减法。
更新 ,格式化你的date的方式,你不能使用strtotime()
,而是使用这个代码:
$date = '02/07/2009 00:07:00'; $date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date); echo $date;
输出:
2009-07-02 00:07:00
这个网站有两个非常简单的解决scheme – 只是检查代码,我提供的描述,以防万一你想他们 – 节省点击一些。
http://www.richardlord.net/blog/dates-in-php-and-mysql
1.一种常见的解决scheme是将date存储在DATETIME字段中,并使用PHP的date()和strtotime()函数在PHP时间戳和MySQL DATETIME之间进行转换。 这些方法将被使用如下 –
$mysqldate = date( 'Ymd H:i:s', $phpdate ); $phpdate = strtotime( $mysqldate );
2.我们的第二个select是让MySQL做这个工作。 MySQL有我们可以用来在我们访问数据库的地方转换数据的函数。 UNIX_TIMESTAMP将从DATETIME转换为PHP时间戳,而FROM_UNIXTIME将从PHP时间戳转换为DATETIME。 这些方法在SQL查询中使用。 所以我们使用这样的查询插入和更新date –
$query = "UPDATE table SET datetimefield = FROM_UNIXTIME($phpdate) WHERE..."; $query = "SELECT UNIX_TIMESTAMP(datetimefield) FROM table WHERE...";
您正在查找MySQL函数FROM_UNIXTIME()
和UNIX_TIMESTAMP()
。
在你的SQL中使用它们,例如:
mysql> SELECT UNIX_TIMESTAMP(NOW()); +-----------------------+ | UNIX_TIMESTAMP(NOW()) | +-----------------------+ | 1311343579 | +-----------------------+ 1 row in set (0.00 sec) mysql> SELECT FROM_UNIXTIME(1311343579); +---------------------------+ | FROM_UNIXTIME(1311343579) | +---------------------------+ | 2011-07-22 15:06:19 | +---------------------------+ 1 row in set (0.00 sec)
如果intake_date是一些常见的date格式,你可以使用date()
和strtotime()
$mysqlDate = date('Ymd H:i:s', strtotime($_POST['intake_date']));
但是,这只有在strtotime()
接受date格式时才有效。 看到它的文档页面支持的格式。
如果您的date格式为dd / mm / yyyy,请使用以下内容:
$date = explode('/', $_POST['posted_date']); $new_date = $date[2].'-'.$date[1].'-'.$date[0];
如果以mm / dd / yyyy为单位,只需更改第二行:
$new_date = $date[2].'-'.$date[0].'-'.$date[1];
function my_date_parse($date) { if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m)) return false; $day = $m[1]; $month = $m[2]; $year = $m[3]; if (!checkdate($month, $day, $year)) return false; return "$year-$month-$day"; }
有几个选项。
将其转换为时间戳并按照strtotime()
其他post的指示使用或使用MySQL的date分析选项
如果您知道$ _POST [intake_date]中的date格式,则可以使用explode获取年份,月份和时间,然后连接以形成有效的mySqldate。 例如,如果你在date上得到像12/15/1988这样的东西,你可以这样做
$date = explode($_POST['intake_date'], '/'); mysql_date = $date[2].'-'$date[1].'-'$date[0];
但如果你有有效的datedate('ym-d',strtotime($ date)); 也应该工作
PHP 5.3的函数可以根据您指定的任何格式在DateTime对象上创build和重新格式化:
$mysql_date = "2012-01-02"; // date in Ymd format as MySQL stores it $date_obj = date_create_from_format('Ym-d',$mysql_date); $date = date_format($date_obj, 'm/d/Y'); echo $date;
输出:
01/02/2012
MySQL也可以在插入/更新时使用STR_TO_DATE()
函数来控制格式,查询时使用DATE_FORMAT()
。
$php_date = "01/02/2012"; $update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')"; $query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";