我在MySQL中有一个日期时间列。

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


当前回答

忘记所有。只使用:

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

其他回答

$valid_date = date( 'm/d/y g:i A', strtotime($date));

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

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

如果更愿意在PHP中完成,则需要date函数,但必须首先将数据库值转换为时间戳。

要在PHP中正确格式化DateTime对象以存储在MySQL中,请使用MySQL使用的标准化格式,即ISO 8601。

PHP从5.1.1版本开始就将这种格式存储为常量,我强烈建议使用这种格式,而不是每次都手动输入字符串。

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

这个和其他PHP DateTime常量的列表可以在http://php.net/manual/en/class.datetime.php#datetime.constants.types上找到

最后是PHP 5.3及以上版本的正确解决方案: (像评论中提到的那样,在示例中添加了可选的时区)

无时区:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');

时区:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date, new \DateTimeZone('UTC'));
$date->setTimezone(new \DateTimeZone('Europe/Berlin'));
echo $date->format('m/d/y h:i a');

我建议的方法如下。首先,从一个mysql格式的字符串创建一个基本的datetime对象;然后按你喜欢的方式格式化。幸运的是,mysql datetime是符合iso8601标准的,所以代码本身看起来非常简单和优雅。但是请记住,datetime列没有时区信息,因此需要适当地转换它。

代码如下:

(new ISO8601Formatted(
    new FromISO8601('2038-01-19 11:14:07'),
    'm/d/Y h:iA'
))
    ->value();

它输出01/19/2038 11:14AM——希望是你所期望的。

这个例子使用了蛋白库。如果你喜欢,你可以再看一些。