以下动态生成rss源代码块的示例无法正确打印日期。
<?php $db = new mysqli("a", "b", "c", "d");
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="http://site.com/rssfeed/" rel="self" type="application/rss+xml" />
<title>Test</title>
<description>Test Feed</description>
<link>http://site.com/rssfeed/</link>
<copyright>Your Copyright Information</copyright>
<?php $query = "SELECT * FROM `table` ORDER BY `id` DESC";
$results = $db->query($query) or die(mysql_error());
$number = $results->num_rows;
for ($i = 1; $i <= $number; $i++) {
$row = $results->fetch_assoc();
$title = $row['title'];
$description = $row['description'];
$link = $row['link'];
$date = date("r", $row['date']);
?>
<item>
<title><?php echo $title; ?></title>
<description><?php echo $description; ?></description>
<link><?php echo $link; ?></link>
<pubDate><?php echo $date; ?></pubDate>
<?php /*?><guid><?php echo $link; ?></guid><?php */?>
</item>
<?php } ?>
</channel>
</rss>
<?php $db->close(); ?>
table
列为id
,title
,description
,link
,date
<pubDate><?php echo $date; ?></pubDate>
值时, http://site.com/rssfeed/index.php不会在date
标记内提供任何日期输出
INSERT INTO `table` (`id`, `title`, `description`, `link`, `date`)
VALUES
(1,'Site || Home', 'http://www.site.com', 'http://www.site.com', 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP');
另一方面,当以下列方式插入date
值时,http://site.com/rssfeed/index.php会向所有可用的动态Feed输出错误的日期(它只为所有可用的Feed打印一个错误的日期)比如Thursday, January 01, 1970 6:33 AM
INSERT INTO `table` (`id`, `title`, `description`, `link`, `date`)
VALUES
(1,'Site || Home', 'http://www.site.com', 'http://www.site.com', '2012-05-07 02:16:46');
顺便说一句,在create table语句中,列date
定义如下:
`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
Rss验证器在验证过程中提供以下建议
Implausible date: Thu, 01 Jan 1970 01:33:32 +0100
为什么会这样?有什么想法吗?
提前致谢。
答案 0 :(得分:0)
mysql timestmap列将其内容返回为YYYY-MM-DD HH:MM:SS
字符串值,您可以 NOT 直接传递给PHP的日期调用。这需要一个unix时间戳。如果您必须在PHP端格式化日期,那么您必须执行
SELECT UNIX_TIMESTAMP(`date`) AS date FROM yourtable
代替。或者,您可以欺骗PHP端并使用
$date = date("r", strtotime($row['date']));
或使用MySQL DATE_FORMAT()函数将其转换为您的RFC2822格式
评论后续:
不,您的插入时间戳字符串不起作用:
mysql> use test;
Database changed
mysql> create table x (x datetime);
Query OK, 0 rows affected (0.13 sec)
mysql> insert into x (x) values ('timestamp default current_timestamp');
sQuery OK, 1 row affected, 1 warning (0.43 sec)
mysql> select * from x;
+---------------------+
| x |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)