我正在尝试用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日星期六
任何帮助将不胜感激!
西蒙
答案 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时间戳。