PHP日期格式问题

时间:2010-02-13 16:29:29

标签: php datetime

我正在尝试用PHP格式化一些日期(我是Coldfusion程序员,所以语法类似,但我被卡住了!)。

日期在我想要的显示中完美格式化。然而,他们都回归1970年1月1日。

任何人都可以对此有所了解吗?

对于后台,我从mySQL中的datetime列中提取日期。我正在尝试格式化的原始日期是....

2010-04-03 00:00:00

这是我正在使用的代码行....

$xml_output .= "\t\t<eventdate>" . date("l jS F", $row['event_date']) . "</eventdate>\n";

我希望它显示为:4月3日星期六

任何帮助将不胜感激!

西蒙

5 个答案:

答案 0 :(得分:6)

date()的第二个参数必须是UNIX timestamp

首先使用strtotime()将日期字符串转换为时间戳:

$timestamp = strtotime($row["event_date"]);
echo date("l jS F", $timestamp); // Saturday 3rd April 

手册页:

答案 1 :(得分:2)

date函数适用于UNIX timestamp (即1970年1月1日以来的秒数),而不是作为字符串传递的日期。

这意味着您必须先使用strtotime将日期转换为时间戳,例如:

$timestamp = strtotime('2010-04-03 00:00:00');

然后,您可以在此时间戳上使用date函数:

echo date('l jS F', $timestamp);

它可以为您提供所需的输出:

Saturday 3rd April

答案 2 :(得分:1)

或者,您可以让MySQL format the date为您进行检索(在构建XML时提供更清晰的代码):

SELECT
  event_date,
  DATE_FORMAT( event_date, '%W %D %M' ) AS event_date_formatted
FROM
  ...

然后在PHP中:

$xml_output .= "\t\t<eventdate>" . $row['event_date_formatted'] . "</eventdate>\n";

此外:
MySQL日期格式化函数更灵活一些,因为它们不依赖于unix时间戳(如果你使用DATETIME字段,那就是)。不可否认,也许有点不太可能;但是如果你的event_date超过了无符号的32位整数时间戳边界,你几乎搞砸了php的date函数。尝试在1970年1月1日之前或2038年1月19日之后格式化日期,您将看到我的意思。

答案 3 :(得分:0)

使用strftime()函数在适合date()的unix时间戳中转换从数据库获取的日期时间:

date("l jS F", strtotime($row['event_date']))

答案 4 :(得分:0)

PHP日期函数需要接收unix时间戳。

将从db中提取的日期格式更改为unix时间戳。