将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列是DATEtypes:

 $date = date('Ym-d', strtotime(str_replace('-', '/', $date))); 

2.如果你的MySQL列是DATETIMEtypes:

 $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`";