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

Convert from MySQL datetime to another format with PHP

我在MySQL中有一个datetime列。

如何使用PHP将其转换为m m/dd/yy h:m(am/pm)显示?


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

1
2
$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的标准日期格式。

(编者按:这个答案之所以出现在这里,是因为一个原始问题的措词混乱,而且谷歌提供了这个答案的一般效用,即使它没有直接回答现在存在的问题)


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

1
2
3
4
// $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 5,也可以尝试

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


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

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


最后,针对php 5.3及更高版本的正确解决方案是:

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


一种更简单的方法是直接在mysql查询中格式化日期,而不是用php。日期格式见mysql手册条目。

如果您愿意用PHP来实现,那么您需要日期函数,但是您必须首先将数据库值转换为时间戳。


忘记所有。仅使用:

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


要正确格式化php中用于存储在mysql中的DateTime对象,请使用mysql使用的标准化格式,即iso 8601。

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

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

http://php.net/manual/en/class.datetime.php datetime.constants.types上提供了此参数和其他php datetime常量的列表。


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

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


使用日期功能:

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


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

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

使用as操作符命名行很重要,如上面的示例(作为datefrom,作为datefuntil)。你写的名字有名字,结果中将调用这些行。

这个例子的输出将是

[月日,数字(0..31)][月名(1月..12月)][年,数字,四位数]

示例:2015年8月5日

用所选分隔符更改点,并检查日期格式(日期、格式)功能以了解更多日期格式。


取决于您的mysql日期时间配置。通常:2011-12-31 07:55:13格式。这个非常简单的函数应该具有魔力:

1
2
3
4
5
6
function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

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

1
2
3
4
5
6
7
8
function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}


您还可以让查询以unix时间戳的形式返回时间。这样就不再需要调用strtotime(),而使PHP方面的工作强度降低了一些……

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

然后在PHP中,只需使用date()函数以您希望的方式格式化它。

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

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

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

有两个不同的查询只是为了改变日期在用户界面中的显示方式,这很烦人。


在Unix时间戳中没有返回日期可能会有问题,所以这对我很有用…

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


这将起作用…

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


使用php版本4.4.9&mysql 5.0,这对我很有用:

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

PubDate是mysql中的列。


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