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 如果您要使用斜杠。
随着时间的推移,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 如果您要使用斜杠。