2010-02-13 103 views
2

我试图在PHP中格式化一些日期(我是Coldfusion程序员,所以语法相似,但我卡住了!)。PHP日期格式问题

日期格式完美地显示我想要的显示。但是,他们都返回1970年1月1日。

任何人都可以在这个?

为了背景,我从mySQL的日期时间列中提取日期。原始日期我试图格式....

2010-04-03 00:00:00

这里是我使用的代码行....

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

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

任何帮助,将不胜感激!

西蒙

回答

6

date()的第二个参数需要是UNIX timestamp

转换你的日期字符串成一个时间戳首先使用strtotime()

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

手册页:

+0

你忘了将'$ timestamp'作为参数传递给'date()' – 2010-02-13 16:42:34

+0

@fireeyedboy谢谢,更正了。 – 2010-02-13 16:43:43

+0

完美,非常感谢你们!正是我需要:) – 2010-02-13 17:00:34

0

使用strftime()功能,您从数据库中获取的时间值转换适合一个Unix时间戳date()

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

PHP日期函数希望接收Unix时间戳。

将您从数据库中取出的日期格式更改为unix时间戳。

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 
1

Alternati vely,你可以让MySQL的format the date为你检索(做了更清晰的代码在构建XML):

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

然后:

$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日之前格式化一个日期,你会明白我的意思。

+0

真棒,这可能会快得多的结果返回。我会给它一个去!无论如何,上面的修复时间戳已经解决了问题。但我会更快地将性感的日期直接从mySQL中拿出来:) – 2010-02-13 17:08:41