从 MySQL 日期到 RFC822 日期格式的转换

2024-01-02

我真的不知道这里发生了什么事。我正在尝试向我的博客添加 RSS 提要。由于 RSS 要求日期采用 RFC822 格式,因此我使用 PHP 日期函数来转换原始时间戳 (0000-00-00 00:00:00)。问题是,提要中我的所有帖子显示的日期和时间是 1970 年 1 月 1 日 01:33。这是代码:

<?php
while ($row = $query->fetch_assoc()) {
?>
<item>
    <title><?php echo $row['title']; ?></title>
    <description>Item description</description>
    <link>http://example.com/blog.php<?php echo '?id='.$row['id']; ?></link>
    <pubDate><?php echo date('r', $row['date_posted']); ?></pubDate>
</item>

编辑:这是我的查询。我在这里转换成Unix时间戳吗?

$query = $db->query("
SELECT      `posts`.`id`,
            `posts`.`cat_id`,
            `posts`.`title`,
            `posts`.`contents`,
            `posts`.`date_posted`
FROM        `posts`
ORDER BY    `posts`.`date_posted`
DESC 
LIMIT 10");

EDIT2:感谢您的所有帮助,但它仍然不起作用。诚然,我不太明白这一点,但我确信有一个简单的解决方案。整个 feed.php 文档实际上并没有那么长,所以这里是所有代码,以防我错过提及一些重要的细节。哦,日期正确存储在数据库的 date_posted 列中。

<?php 

$db = new mysqli('host', 'user', 'pass', 'db');

$query = $db->query("
    SELECT      `posts`.`id`,
                `posts`.`cat_id`,
                `posts`.`title`,
                `posts`.`contents`,
                `posts`.`date_posted`
    FROM        `posts`
    ORDER BY    `posts`.`date_posted`
    DESC 
    LIMIT 10");

if ($db->affected_rows >= 1) {

    echo '<?xml version="1.0" encoding="iso-8859-1" ?>' ?>
    <rss version="2.0">
    <channel>
        <title>Title</title>
        <description>RSS feed</description>
        <link>http://example.com</link>
        
        <?php
        while ($row = $query->fetch_assoc()) {
        ?>
        <item>
                <title><?php echo $row['title']; ?></title>
                <description><?php echo substr($row['contents'], 0, 150) ?></description>
                <link>http://example.com/blog.php<?php echo '?id='.$row['id']; ?></link>
                <pubDate><?php echo date('r', $row['date_posted']); ?></pubDate>
        </item>
        <?php
        }
        ?>
        </channel>
        </rss>
<?php
}
?>

的原始价值是多少$row['date_posted']?请记住date()需要一个 PHP 时间戳,它是一个普通的 unix 时间戳 - 表示自 1970 年 1 月 1 日以来的秒数的整数。如果你给它一个字符串(例如2012-12-11 08:55:00,你只会得到一个损坏的值,因为 PHP 尝试将该字符串转换为 int:

$now = '2012-12-11 08:56:00';
echo date('r', $now); // Wed, 31 Dec 1969 18:33:32 -0600
echo date('r', (int)$now); // Wed, 31 Dec 1969 18:33:32 -0600
echo (int)$now; // 2012
echo date('r', 2012); // Wed, 31 Dec 1969 18:33:32 -0600

您必须将日期字段转换为 MySQL 中的 unix 时间戳,或者使用 MySQL 的自己的日期格式 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format功能:

SELECT UNIX_TIMESTAMP(date_posted), ...
or
SELECT DATE_FORMAT(date_posted, 'format string here'), ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 MySQL 日期到 RFC822 日期格式的转换 的相关文章

随机推荐