我在MySQL中有一个日期时间列。
如何将其转换为显示为mm/dd/yy H:M (AM/PM)使用PHP?
我在MySQL中有一个日期时间列。
如何将其转换为显示为mm/dd/yy H:M (AM/PM)使用PHP?
当前回答
我建议的方法如下。首先,从一个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——希望是你所期望的。
这个例子使用了蛋白库。如果你喜欢,你可以再看一些。
其他回答
您还可以让您的查询以Unix时间戳的形式返回时间。这将消除调用strtotime()的需要,并使PHP方面的工作不那么密集……
select UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;
然后在PHP中,只需使用date()函数以任何您喜欢的方式格式化它。
<?php
echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>
or
<?php
echo date('F j, Y, g:i a', $row->unixtime);
?>
我喜欢这种方法,而不是使用MySQL的DATE_FORMAT函数,因为它允许您重用相同的查询来获取数据,并允许您更改PHP中的格式。
有两个不同的查询只是为了改变日期在UI中的外观,这很烦人。
取决于你的MySQL datetime配置。典型格式:2011-12-31 07:55:13。这个非常简单的函数应该有魔力:
function datetime()
{
return date( 'Y-m-d 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("Y-m-d H:i:s", strtotime($date_string));
}
将从MySQL检索到的日期转换为所要求的格式(mm/dd/yy H:M (AM/PM)):
// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM
请参考PHP日期格式选项来调整格式。
要在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');