2

我从 facebook 用户对象中获取数据,生日字段具有以下格式:MM/DD/YYYY。在 Symfony2 中使用学说我定义我的生日字段,如:

/**
 * @var \Date $birthday
 *
 * @ORM\Column(name="birthday", type="date", nullable=true)
 */
private $birthday;

这在数据库上生成格式YYYY-DD-MM,我试图将 facebook 格式格式化为我可以与 symfony 一起使用但没有成功的东西,这是我的尝试:

if(isset($fbuser["birthday"]))  {                   //CHECK FOR FIELD birthday
   $date_pz = explode('/',$fbuser["birthday"]);
   // Firts try: $norm_date = array('year' => $date_pz[2], 'month' => $date_pz[0], 'day' => $date_pz[1]);
   // Second try: $norm_date = $date_pz[2] .'-'. $date_pz[0] .'-'. $date_pz[1]);
   $userinfo->setBirthday($norm_date); }

我总是得到:

致命错误:在第 44 行的 /var/www/vhosts/punctis.com/httpdocs/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php 中的非对象上调用成员函数 format()

这意味着我没有以 Symfony 期望的格式发送字符串,所以这里的问题是,如何格式化?

4

3 回答 3

4

如果您有这样的 var 输出:

 echo '<pre>';
 print_r($yourDateTimeObjectVar);die;

//outputs;
DateTime Object
(
  [date] => 2013-12-16 15:17:27
  [timezone_type] => 3
  [timezone] => America/New_York
)

然后,你只需要做:

echo $yourDateTimeObjectVar->format('d/m/Y');

这将输出:

2013 年 12 月 16 日

PS:在这种情况下,对象来自 MySql 日期时间列,它是这样插入的:

$myOrder = new OrderStatus();
$myOrder->setDateOrder(\new DateTime());
$em->persist($myOrder);
$em->flush()

Var ORM 声明:

 @ORM\Column(name="DateOrder", type="datetime", nullable=true)
于 2013-12-16T21:05:16.303 回答
3

Doctrine-TypeDate期待 aa DateTime-object。您可以DateTime::createFromFormat()用来创建所述对象。

您可以在您的实体(例如 in setBirthday($birthday))中执行此操作,或者创建一个自定义 DateType 来为您进行格式化。

于 2013-01-15T16:09:42.300 回答
1

您不应该将字符串传递给$userinfo->setBirthday($norm_date)而是传递DateTime 对象,尝试

 $userinfo->setBirthday(new \DateTime($norm_date));
 $userinfo->setBirthday(new \DateTime('now'));
 $userinfo->setBirthday(new \DateTime('2013-01-15'));
 $userinfo->setBirthday(new \DateTime('+2 days'), new \DateTimeZone('UCT'));

您可以通过多种方式构造DateTime对象,请在此处查看文档:http: //php.net/manual/en/datetime.construct.php

于 2013-01-15T16:10:08.547 回答