-1

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_descriptionlinkdate

http://site.com/rssfeed/index.phpは、値が次の方法で挿入された<pubDate><?php echo $date; ?></pubDate>場合、タグ内で呼び出された日付出力をまったく提供しません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は、使用可能なすべての動的フィードに間違った日付を出力します (使用可能なすべてのフィードに対して間違った日付を 1 つだけ出力します)。お気に入り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

なぜそれが起こっているのですか?何か案が?

前もって感謝します。

4

1 に答える 1

0

mysql の timestmap 列は、その内容を文字列値として返します。これは、PHP の date 呼び出しに直接渡すYYYY-MM-DD HH:MM:SSことはできません。これには 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)
于 2012-05-06T20:47:25.697 に答える