Symfony 6.0时间格式问题数据库上传

Symfony 6.0 time format problem database upload

随着时间的推移,symfony 出现了一些问题。不幸的是,这不是我第一次 运行 参与其中。有没有人遇到过这个问题?如果是这样,谢谢你的帮助。

Controller.php

  if($xml = simplexml_load_file($feedUrl)) {
            $result["chanel"] = $xml->xpath("/rss/channel/item");

            foreach($result as $key => $attribute) {
                $i=0;

                foreach($attribute as $element) {


                    $ret[$i]['title'] = (string)$element->title;
                    $ret[$i]['category'] = (string)$element->category;
                    $ret[$i]['link'] = (string)$element->link;
                    $ret[$i]['pubDate'] = json_decode(json_encode($element->pubDate), TRUE);
                    $ret[$i]['enclosure'] = (array)$element->enclosure;
                    $ret[$i]['description'] = (string)$element->description;

                    $i++;
                }
            }
        }

        foreach ($ret as $feed){

        $newnews = new Newsfeed();

        $newnews->setTitle($feed['title']);
        $newnews->setCategory($feed['category']);
        $newnews->setLink($feed['link']);
        $newnews->setDescription($feed['description']);
        $newnews->setDate(date("Y-m-d h:i:sa", strtotime($feed['pubDate'][0])));
        $newnews->setImage($feed['enclosure']['@attributes']['url']);
        $newnews->setSource('2');

            $entityManager->persist($newnews);
            $entityManager->flush();


        }

这个问题

date() 函数 returns 一个字符串,所以这一行不起作用:

$newnews->setDate(date("Y-m-d h:i:sa", strtotime($feed['pubDate'][0])));

你或许可以只使用:

$newnews->setDate(new \DateTimeImmutable($feed['pubDate'][0]));

我以前遇到过这个问题。对我来说,当只使用日期(没有时间)时,MySQL 和 doctrine annotations 具有 Date 类型,但 PHP/Symfony 没有。

正如 Chris 所提到的,date() 函数 return 是一个字符串,但是 class DateTime 是你的朋友。

即使它被称为 DateTime,这个 class 允许 formatting 并且你确实可以,例如,用它只检索一个日期。一个例子是:

$date = new DateTime('2000-01-01 12:30:25');
echo $date->format('Y-m-d');

或者在你的情况下,你确实想要return时间部分

$pubDate = new DateTime($feed['pubDate'][0])->format('Y-m-d h:i:sa');
$newnews->setDate($pubDate);

可以很容易地转换成one-liner。

这将只显示您在 format() 函数中请求的内容。

虽然有一个棘手的问题。至少在我的国家,用斜线 (/) 格式化日期是很常见的,但是 DateTime->format() 不能与 Y/m/d 一起使用,所以记住这一点并检查是否正确格式 here 如果您要使用斜杠。