将DATETIME转换为易于阅读的日期

4
我正在尝试将 DATETIME 转换为人们可以实际使用的格式。以下是日期:
2013-09-05 11:52:10

我正在使用:

date("D, d M Y", '2013-09-05 11:52:10');

正在变成:

Thu, 01 Jan 1970

我不理解。

1
第二个参数需要是一个整数时间戳。http://php.net/manual/zh/function.date.php - Steve Robbins
1
“2013-09-05 11:52:10”有什么不易于人阅读的地方? - ceejayoz
3个回答

7

在将日期传递给date()之前,您需要将其转换为时间戳。

$time = strtotime('2013-09-05 11:52:10');
echo date("D, d M Y", $time);

1
我真的非常讨厌 strtottime() 函数。如果你知道输入格式,最好使用 DateTime::CreateFromFormat()。但更好的方法是直接使用 MySQL 的 UNIX_TIMESTAMP() 函数,这样就不需要进行任何类型的转换了。 - Spudley

5

这是 PHP 代码吗?如果是,正确的写法应该是:

date("D, d M Y", strtotime('2013-09-05 11:52:10'));

如果涉及到MySql,正确的函数是使用DATE_FORMAT(但是你所拥有的是无效的MySql语法)。请澄清。

我真的非常讨厌strtottime()函数。如果你知道输入格式,最好使用DateTime::CreateFromFormat()。但更好的方法是直接使用MySQL的UNIX_TIMESTAMP()函数,这样就不需要进行任何类型的转换了。 - Spudley
2
@Spudley:我也不喜欢,但有一个严肃的反驳观点:它有效。它已经被记录下来了。作为一名工程师,我必须每次都把这个放在个人偏好之上。 - Jon
其他两种替代方案都有更好的文档记录。特别是CreateFormFormat(),它是专门为了改进strtotime()的缺点而创建的。strtotime()确实存在一些非常严重的问题,特别是在处理模糊日期时(在这种情况下不是问题,但会使人们困惑)。它也非常慢,因为它必须在开始之前确定要使用的格式。如果您知道格式,请不要使用strtottime()。如果您不知道格式,则使用strtotime()太冒险了。 - Spudley

2

PHP的date()函数只能处理整数时间戳值;它无法处理字符串作为输入。

如果您需要将一个字符串日期格式转换为另一个字符串日期格式,您应该使用DateTime::CreateFromFormat()方法:

$dateObj = DateTime::CreateFromFormat($inputString);
$outputString = $dateObj->Format('D, d M Y');

然而,我建议使用MySQL的UNIX_TIMESTAMP()函数编写查询语句,将日期作为数字时间戳传递到PHP中,以便PHP的date()函数可以处理:

MySQL:

SELECT UNIX_TIMESTAMP(yourDateField) as yourDateField_timestamp FROM yourTable ...

那么你可以按照自己的意愿编写PHP代码:

PHP:

$dateObj = date('D, d M Y', $row['yourDateField_timestamp']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接