Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转换为RFC822日期格式_Php_Mysql_Rss_Timestamp_Rfc822 - Fatal编程技术网

Php 转换为RFC822日期格式

Php 转换为RFC822日期格式,php,mysql,rss,timestamp,rfc822,Php,Mysql,Rss,Timestamp,Rfc822,我真的不知道这里发生了什么。我正在尝试向我的博客添加RSS提要。由于RSS要求日期为RFC822格式,因此我使用PHP日期函数转换原始时间戳(0000-00-00 00:00:00)。问题是feed中显示的所有我的帖子的日期和时间是1970年1月1日01:33。代码如下: <?php while ($row = $query->fetch_assoc()) { ?> <item> <title><?php echo $row['title'

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

<?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>
编辑2:谢谢你的帮助,但还是不行。诚然,我不太明白这一点,但我相信有一个简单的解决办法。整个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://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
}
?>

标题
RSS源
http://mysite.com
http://mysite.com/blog.php

这是因为php的日期对象是一个。从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'),其中id=1
。您可以使用php的
date('Y-m-dh:i:s')
来获取此格式

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

<?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>

项目说明
http://mysite.com/blog.php

行['date\u 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的函数:

SELECT UNIX_TIMESTAMP(date_posted), ...
or
SELECT DATE_FORMAT(date_posted, 'format string here'), ...

$row['date\u posted']所在的列从mysql中的数据类型timestamp的is中获取行。它的默认模式设置为0000-00-00 00:00:00。因此,特定帖子的格式为2012-12-09 16:42:12,依此类推。这对我来说是未知的领域。我是在php文档中还是在数据库本身中转换时间戳?我在上面包含了我的查询。我非常感谢您的解释在转换日期字段的位置。如果使用unix_时间戳选项,代码应该“正常工作”原样不变。您将获得PHP可以接受的格式的时间戳。如果您使用date_format选项,那么您将拉出PHP中所有的日期格式,只需输出从mysql获得的字符串。是的,但我实际上在哪里编写“SELECT UNIX_timestamp…”?我是否将其包括在查询中?如果是,查询中的位置?谢谢!理论上你是对的,但我不知道如何实现你的解决方案。不过我找到了另一种方法:简单地以以下方式使用strotime函数:echo date('r',strotime('row['date\u posted');基本调试:
var\u dump('row['date\u posted']))
谢谢您的努力,但我复制了您提供的代码片段,它仍然显示错误的日期。我还检查了日期是否正确存储在数据库中,事实就是这样。我包含了上面feed.php的所有代码,以防您发现其他错误。再次感谢!
SELECT UNIX_TIMESTAMP(date_posted), ...
or
SELECT DATE_FORMAT(date_posted, 'format string here'), ...