使用PHP将MySQLdate时间转换为另一种格式

我在MySQL中有一个datetime列。

如何将它转换为显示为mm / dd / yy H:M(AM / PM)使用PHP?

如果您正在寻找将date规格化为MySQL格式的方法,请使用以下内容

 $phpdate = strtotime( $mysqldate ); $mysqldate = date( 'Ymd H:i:s', $phpdate ); 

$phpdate = strtotime( $mysqldate )接受一个string,并执行一系列的启发式把这个string变成一个unix时间戳。

$mysqldate = date( 'Ymd H:i:s', $phpdate )使用该时间戳和PHP的date函数将该时间戳恢复为MySQL的标准date格式。

编者注 :这个答案在这里是因为一个原来的问题,混淆的措辞,一般谷歌有用这个答案,即使它没有直接回答现在存在的问题)

将从MySQL检索的date转换为请求的格式( mm/dd/yy H:M (AM/PM) ):

 // $datetime is something like: 2014-01-31 13:05:59 $time = strtotime($datetimeFromMysql); $myFormatForView = date("m/d/yg:i A", $time); // $myFormatForView is something like: 01/31/14 1:05 PM 

请参阅PHPdate格式化选项来调整格式。

如果你使用PHP 5,你也可以尝试

 $oDate = new DateTime($row->createdate); $sDate = $oDate->format("Ymd H:i:s"); 
 $valid_date = date( 'm/d/yg:i A', strtotime($date)); 

参考: http : //php.net/manual/en/function.date.php

更简单的方法是直接在MySQL查询中格式化date,而不是PHP。 请参阅DATE_FORMAT的MySQL手册条目 。

如果你想用PHP来做,那么你需要date函数,但是你必须首先将数据库值转换成时间戳。

最后,PHP 5.3及以上版本的正确解决scheme:

 $date = DateTime::createFromFormat('Ymd H:i:s', $mysql_source_date); echo $date->format('m/d/yh:i a'); 

忘记一切。 只要使用:

 $date = date("Ymd H:i:s",strtotime(str_replace('/','-',$date))) 

为了在PHP中正确格式化一个用于存储在MySQL中的DateTime对象,使用了MySQL使用的标准格式,即ISO 8601 。

PHP从5.1.1开始就把这种格式保存为一个常量,我强烈推荐使用它,而不是每次手动inputstring。

 $dtNow = new DateTime(); $mysqlDateTime = $dtNow->format(DateTime::ISO8601); 

这和其他PHPdate时间常量列表可在http://php.net/manual/en/class.datetime.php#datetime.constants.types

这应该在SQL查询中格式化一个字段:

 SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename 

使用datefunction:

 <?php echo date("m/d/yg:i (A)", $DB_Date_Field); ?> 

取决于你的MySQLdate时间configuration。 通常: 2011-12-31 07:55:13格式。 这个非常简单的function应该做到这一点:

 function datetime() { return date( 'Ymd H:i:s', time()); } echo datetime(); // display example: 2011-12-31 07:55:13 

或者更进一步来匹配这个问题。

 function datetime($date_string = false) { if (!$date_string) { $date_string = time(); } return date("Ymd H:i:s", strtotime($date_string)); } 
 SELECT DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom, DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil FROM demo 

如果您不想更改PHP代码中的每个函数,为了显示预期的date格式,请在源代码(数据库)中更改它。

使用as运算符来命名行是非常重要的(如dateFrom,如dateUntil)。 你写的名字是名字,行将在你的结果中被调用。

这个例子的输出将是

[月份的date,数字(0..31)]。[月份名称(1月… 12月)]。[年份,数字,4位数字]

例如:2015年8月5日

用select的分隔符更改点,并检查DATE_FORMAT(date,格式)函数以获取更多date格式。

你也可以让你的查询返回一个Unix时间戳。 这将摆脱调用strtotime()的需要,并使事情在PHP方面less一点密集…

 select UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234; 

然后在PHP中使用date()函数来设置它的格式,无论你喜欢的方式。

 <?php echo date('l jS \of FY h:i:s A', $row->unixtime); ?> 

要么

 <?php echo date('F j, Y, g:i a', $row->unixtime); ?> 

我喜欢这种方法,而不是使用MySQL的DATE_FORMAT函数,因为它允许您重复使用相同的查询来获取数据,并允许您在PHP中更改格式。

有两个不同的查询只是为了改变date在用户界面中的方式。

你可以有没有在Unix时间戳返回的date有麻烦,所以这对我的作品…

 return date("F j, Y g:ia", strtotime(substr($datestring, 0, 15))) 

这将工作…

 echo date('m/d/y H:i (A)',strtotime($data_from_mysql)); 

使用PHP版本4.4.9和MySQL 5.0,这为我工作:

 $oDate = strtotime($row['PubDate']); $sDate = date("m/d/y",$oDate); echo $sDate 

PubDate是MySQL中的列。

 $date = "'".date('Ymd H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";