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

时间:2008-09-25 23:10:30

标签: php mysql datetime

我在MySQL中有一个datetime列。

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

18 个答案:

答案 0 :(得分:490)

如果您正在寻找将日期规范化为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的标准日期格式。

编辑注释:这个答案就在这里,原因是一个令人困惑的措辞的原始问题,以及这个答案提供的一般Google有用性,即使它没有'直接回答现在存在的问题)

答案 1 :(得分:293)

将从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 date formatting options调整格式。

答案 2 :(得分:105)

如果您使用的是PHP 5,也可以尝试

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

答案 3 :(得分:41)

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

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

答案 4 :(得分:21)

最后是PHP 5.3及以上版本的正确解决方案:

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

答案 5 :(得分:12)

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

如果您更愿意使用PHP,那么您需要date函数,但您必须先将数据库值转换为时间戳。

答案 6 :(得分:10)

忘了一切。只需使用:

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

答案 7 :(得分:9)

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

自从版本5.1.1以来,PHP已将此格式存储为常量,我强烈建议您使用它,而不是每次都手动键入字符串。

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

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

获得

答案 8 :(得分:8)

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

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

答案 9 :(得分:7)

使用date功能:

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

答案 10 :(得分:5)

取决于您的MySQL日期时间配置。通常: 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));
}

答案 11 :(得分:5)

SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

如果您不想更改PHP代码中的每个功能,要显示预期的日期格式,请在源代码处更改它 - 您的数据库。

使用 as 运算符命名行是很重要的,如上例所示(作为dateFrom,作为dateUntil)。您在那里写的名称是名称,行将在您的结果中调用。

此示例的输出将为

[日期,数字(0..31)]。[月份名称(1月〜12月)]。[年份,数字,4位数]

示例:5.August.2015

使用选择的分隔符更改点,并检查DATE_FORMAT(date,format)函数以获取更多日期格式。

答案 12 :(得分:3)

您还可以让查询将时间作为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中的显示方式很烦人。

答案 13 :(得分:1)

您可能会遇到Unix时间戳中未返回的日期,因此这对我有用......

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

答案 14 :(得分:1)

这会有用......

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

答案 15 :(得分:0)

使用PHP版本4.4.9&amp; MySQL 5.0,这对我有用:

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

PubDateMySQL中的列。

答案 16 :(得分:0)

我建议的方法如下。首先,您使用mysql格式的字符串创建一个基本的datetime对象;然后以您喜欢的方式对其进行格式化。幸运的是,mysql datetime符合ISO8601,因此代码本身看起来非常简单而优雅。请记住,尽管datetime列没有时区信息,所以you need to convert it appropriately

这是代码:

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

它输出01/19/2038 11:14AM-希望是您期望的。

此示例使用蛋白酥皮库。如果愿意,可以check out some more of it

答案 17 :(得分:-1)

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