首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换为RFC822日期格式

转换为RFC822日期格式
EN

Stack Overflow用户
提问于 2012-12-11 22:53:06
回答 2查看 4.2K关注 0票数 0

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

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

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

代码语言:javascript
复制
$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列中。

代码语言:javascript
复制
<?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://mysite.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://mysite.com/blog.php<?php echo '?id='.$row['id']; ?></link>
                <pubDate><?php echo date('r', $row['date_posted']); ?></pubDate>
        </item>
        <?php
        }
        ?>
        </channel>
        </rss>
<?php
}
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 22:57:20

$row['date_posted']的原始值是什么?请记住,date()需要一个PHP时间戳,这是一个普通的unix时间戳-表示自1970年1月1日以来的秒数的整数。如果你给它一个字符串(例如2012-12-11 08:55:00,你只会得到一个乱七八糟的值,因为PHP试图把这个字符串转换成一个整数:

代码语言:javascript
复制
$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的own date formatting函数:

代码语言:javascript
复制
SELECT UNIX_TIMESTAMP(date_posted), ...
or
SELECT DATE_FORMAT(date_posted, 'format string here'), ...
票数 2
EN

Stack Overflow用户

发布于 2012-12-11 22:56:48

这是因为php的date对象是一个UNIX Timestamp。从1970年1月1日开始。您需要检查该范围之外的日期,例如0000-00-00,然后手动处理。

此外,检查您的数据库,并确保您的时间戳被正确存储。如果您期望的是一个真实的日期,并且得到的是0000-00-00,那么您可能直接插入了PHP时间戳,MySQL无法识别这种格式。您必须以字符串的形式在中插入时间戳,格式为:Y-m-d H:i:s ex:INSERT INTO table (time) VALUES ('2012-01-01 13:30:00') WHERE id=1。你可以使用php的date('Y-m-d H:i:s')来获得这种格式。

如果您希望某些日期是0,而其他日期是实际日期,那么您可以插入一个内联If,以便将0000日期替换为您想要的任何日期,同时根据需要转换正常日期。

代码语言:javascript
复制
<?php
while ($row = $query->fetch_assoc()) {
?>
<item>
    <title><?php echo $row['title']; ?></title>
    <description>Item description</description>
    <link>http://mysite.com/blog.php<?php echo '?id='.$row['id']; ?></link>
    <pubDate><?php echo strncmp($row['date_posted'], '0000-00-00', 10) == 0 ? 'NOT PUBLISHED' : date('r', $row['date_posted']); ?></pubDate>
</item>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13822313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档