如何在Symfony上格式化日期值?

时间:2013-01-15 16:02:52

标签: symfony

我从facebook用户对象获取数据时,生日字段的格式为: MM / DD / YYYY 。在使用doctrine的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); }

我总是得到:

  

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

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

3 个答案:

答案 0 :(得分: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');

将输出:

16/12/2013

PS: 在这种情况下,对象来自MySql datetime列,它插入如下:

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

Var ORM声明:

 @ORM\Column(name="DateOrder", type="datetime", nullable=true)

答案 1 :(得分:3)

Doctrine-Type Date期待一个DateTime - 对象。您可以使用DateTime::createFromFormat()来创建所述对象。

您可以在实体中执行此操作(例如在setBirthday($birthday)中),也可以创建自定义DateType,为您执行格式化。

答案 2 :(得分:1)

您不应将字符串传递给 $ userinfo-&gt; 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