我从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期望的格式发送字符串,所以这里的问题是,如何格式化?
答案 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