从MySQL datetime转换为另一种格式的PHP

我有一个datetime列在MySQL。

如何将其转换为显示为年/月/日H:M(上午/下午)使用PHP?

788143 次浏览

更简单的方法是直接在MySQL查询中格式化日期,而不是PHP。参见MySQL手动输入DATE_FORMAT

如果你更愿意在PHP中完成,那么你需要日期函数,但你必须先将数据库值转换为时间戳。

使用日期函数:

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

将从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日期格式选项来调整格式。

您还可以让您的查询以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);
?>

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

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

有两个不同的查询只是为了改变日期在UI中的外观,这很烦人。

如果您正在使用PHP 5,也可以尝试一下

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");

使用PHP 4.4.9版本&MySQL 5.0,这适用于我:

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

PubDateMySQL中的列。

你可能会遇到Unix时间戳中没有返回的日期的问题,所以这对我来说是可行的…

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

如果您正在寻找一种将日期规范化为MySQL格式的方法,请使用以下方法

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

$phpdate = strtotime( $mysqldate )行接受一个字符串,并执行一系列启发式操作将该字符串转换为unix时间戳。

$mysqldate = date( 'Y-m-d H:i:s', $phpdate )行使用时间戳和PHP的date函数将时间戳转换回MySQL的标准日期格式。

(编辑注意:这个答案在这里是因为一个原始的问题,措辞令人困惑,这个答案提供了一般谷歌有用性,即使它没有直接回答现在存在的问题)

这将格式化SQL查询中的字段:

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

忘记所有。只使用:

$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

要正确格式化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中找到

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

取决于你的MySQL datetime配置。通常:< em > 2011-12-31 07:55:13 < / em >格式。这个非常简单的函数应该有魔力:

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));
}

这会有用的……

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
最终正确的解决方案PHP 5.3及以上: (像评论中提到的那样,在示例中添加了可选的Timezone)

无时区:

$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');
SELECT
DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

如果您不想更改PHP代码中的每个函数,以显示预期的日期格式,请在源代码—您的数据库中更改它。

重要的是要像上面的例子一样用作为操作符来命名行(如dateFrom, dateUntil)。你在这里写的名字,这些行会在结果中被调用。

此示例的输出将是

[每月的第一天,数字(0..31)]。[月份名称(一月至十二月)]。[年份,数字,四位数]

例如:5. august.2015

用所选的分隔符更改圆点,并检查DATE_FORMAT(日期,格式)函数以获得更多日期格式。

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

代码如下:

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

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

这个例子使用了蛋白库。你可以来看看更多如果你喜欢。

直接输出,如德文格式:

  echo(date('d.m.Y H:i:s', strtotime($row["date_added"])));