467

datetime在 MySQL 中有一个专栏。

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

4

18 回答 18

546

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

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

于 2011-03-20T06:06:08.663 回答
320

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

于 2008-09-25T23:30:09.330 回答
115

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

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
于 2008-09-26T04:31:21.397 回答
48
$valid_date = date( 'm/d/y g:i A', strtotime($date));

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

于 2013-03-01T13:02:44.070 回答
31

最后是 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');
于 2014-12-30T21:53:24.297 回答
11

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

如果您更愿意在 PHP 中执行此操作,那么您需要date函数,但您必须先将数据库值转换为时间戳。

于 2008-09-25T23:15:23.950 回答
10

忘记所有。只需使用:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
于 2012-09-14T08:58:35.093 回答
9

要在 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

于 2013-05-31T17:42:08.893 回答
8

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

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
于 2011-11-08T20:07:29.563 回答
7

使用日期函数:

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
于 2008-09-25T23:16:05.197 回答
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));
}
于 2014-01-23T19:49:47.217 回答
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)].[月份名称 (January..December)].[年份,数字,四位数字]

示例:2015 年 8 月 5 日

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

于 2015-07-09T18:12:37.417 回答
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 中的显示方式很烦人。

于 2008-09-25T23:57:03.960 回答
1

您可能会遇到 Unix Timestamp 中未返回的日期的问题,所以这对我有用......

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
于 2010-04-23T01:56:04.733 回答
1

这将工作...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
于 2014-03-12T06:11:04.347 回答
0

使用 PHP 4.4.9 和 MySQL 5.0,这对我有用:

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

PubDateMySQL中的列。

于 2009-11-21T19:12:50.040 回答
0

我建议的方法如下所示。首先,从 mysql 格式的字符串创建一个基本的日期时间对象;然后你按照你喜欢的方式格式化它。幸运的是,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——希望是你所期望的。

此示例使用蛋白酥皮库。如果您愿意,可以查看更多内容

于 2020-05-16T18:18:09.863 回答
-1
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
于 2013-12-02T13:00:47.527 回答