【问题标题】:Set DateTime and Time in Symfony2 from String从字符串设置 Symfony2 中的日期时间和时间
【发布时间】:2015-12-12 23:36:17
【问题描述】:

在我的实体中,我有两个字段,一个是 DateTime 类型,另一个是 Time 类型。

我正在尝试这样做:

$time = "05:45";
$date = "01-09-2015"

$entity = new Entity();
$entity->setDate(new \DateTime($date));
$entity->setTime($time);

在这两种情况下,Symfony 都告诉我代码有格式问题。

我也试过了:

->setDate(new Datetime($date));
->setDate(DateTime::createFromFormat($date, 'd-m-Y));
->setTime(strtotime($time));

总是得到相同的结果。

如果有人可以帮助我,我将不胜感激。

谢谢


更新

现在,我试过了

$date = strtotime($date);
$time = strtotime($time);
$entity->setDate(date("d-m-Y", $date));
$entity->setTime(date("H:i",$time));

Symfony 告诉我:

错误:在非对象上调用成员函数 format()

in vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php at line 53   -
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($platform->getTimeFormatString()) : null;
    }
    /**

我也试过这个:

$dateObject = new DateTime();
$date = $dateObject->format('d-m-Y');
$time = $dateObject->format('H:i');
$entity->setDate($date);
$entity->setTime($time);

symfony 告诉我:

Attempted to call method "format" on class "Symfony\Component\Validator\Constraints\DateTime". On line "$date = $dateObject->format('Y-m-d');"

感谢您的帮助


更新 - 解决

最后,昨天解决了这个问题,使用这个:

$entity->new Entity();
$entity->setDate(\DateTime::createFromFormat('d-m-Y',$date));
$entity->setTime(\DateTime::createFromFormat('H:i',$time));

谢谢!

【问题讨论】:

  • 你能复制粘贴 Symfony 的错误信息吗?
  • 我出去了。三个小时后我要回家,我会输入错误代码。谢谢。
  • 我用更改的结果更新了帖子。

标签: php symfony datetime time symfony-2.1


【解决方案1】:

Symfony 不知道在哪里可以找到DateTime 类,所以它在错误的(默认)命名空间中搜索。使用前导 \

此外,您在 createFromFormat() 函数中反转了 format 参数和 time 参数。

所以你的代码变成了:

$time = "05:45";
$date = "01-09-2015"

$entity = new Entity();
$entity->setDate(\DateTime::createFromFormat('d-m-Y', $date));
$entity->setTime(\DateTime::createFromFormat('H:i', $time));

顺便问一下,你确定你真的需要在你的实体中拆分日期和时间吗?这取决于您的情况,但您可以改为这样做(只操作一个对象):

$time = "05:45";
$date = "01-09-2015"

$entity = new Entity();
$entity->setDateTime(\DateTime::createFromFormat('d-m-Y H:i', $date.' '.$time));

【讨论】:

  • 嗨!是的,我需要拆分日期和时间。我用昨晚得到的最终结果更新了帖子。它与您的 andswer 非常相似。谢谢。
【解决方案2】:

查看http://php.net/manual/de/datetime.createfromformat.php 以确保您的格式适合。

或查看 mktime(时、分、秒、月、日、年) 或检查 strtotime(time,now) 例如这里http://www.w3schools.com/php/php_date.asp

【讨论】:

    【解决方案3】:

    这样做:

    $dateObject = new DateTime();
    $date = $dateObject->format('Y-m-d');
    $time = $dateObject->format('H:i:s'); // or $time = $dateObject->format('H:i'); if you dont want to have the seconds
    
    $entity = new Entity();
    $entity->setDate($date);
    $entity->setTime($time);
    

    【讨论】:

    • 感谢您的代码,购买知道 Symfony 抛出此错误:尝试在类“Symfony\Component\Validator\Constraints\DateTime”上调用方法“格式”。上线“$date = $dateObject->format('Y-m-d');”
    • 而不是 $dateObject = new DateTime();使用: $dateObject = new \DateTime(); // 查看日期时间的 \
    • 最后我用 createFromFormat 解决了它,它工作得很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多