“在PHP中转换日期时,在非对象上调用成员函数格式()”

时间:2013-10-07 08:29:25

标签: php date

我无法摆脱此错误消息:

  

在非对象

上调用成员函数format()

所以,我继续谷歌搜索并得到一些像this StackOverflow question这样的好来源。

我试着做类似的事,但我失败了。这是我的代码:

$temp = new DateTime();
/*ERROR HERE*/ $data_umat['tanggal_lahir'] = $data_umat['tanggal_lahir']->format('Y-m-d');
$data_umat['tanggal_lahir'] = $temp;

所以,我做了试验&错误,我发现如果我这样做:

$data_umat['tanggal_lahir'] = date("Y-m-d H:i:s");

日期将成功转换,但它总是返回今天的日期(我不想要)。

我想转换日期,以便10/22/20132013-10-22

7 个答案:

答案 0 :(得分:9)

您正在非对象上调用方法format()。试试这个:

$data_umat['tanggal_lahir'] = new DateTime('10/22/2013');
$data_umat['tanggal_lahir'] = $data_umat['tanggal_lahir']->format('Y-m-d');

或单行:

$data_umat['tanggal_lahir'] = date_create('10/22/2013')->format('Y-m-d');

答案 1 :(得分:3)

您可以使用strtotime()来转换它。它将给定日期转换为时间戳,然后使用date()函数将时间戳转换为所需的日期格式。

试试这个..

$date = '10/22/2013';
$timestamp = strtotime($date);
$new_date = date('Y-m-d',$timestamp );

答案 2 :(得分:1)

$data_umat['tanggal_lahir']不是DateTime的实例,但$temp是。

$data_umat['tanggal_lahir']DateTime

的实例

答案 3 :(得分:1)

$data_umat['tanggal_lahir']不是对象DateTime

的实例

用于使其成为DateTime

的实例
$data_umat['tanggal_lahir'] = new DateTime();

答案 4 :(得分:1)

$temp = new \DateTime(); (need \ ) /*ERROR HERE*/ $data_umat['tanggal_lahir'] = $data_umat['tanggal_lahir']->format('Y-m-d'); $data_umat['tanggal_lahir'] = $temp;

答案 5 :(得分:1)

使用Symfony或Slim with Doctrine时,请尝试:

//表格[birthday =" 2000-12-08"]

[...]

$birthday = \DateTime::createFromFormat("Y-m-d",$formData['birthday']);

$obejct = new $object();
$object->setBirthday($birthday);

[...]

答案 6 :(得分:-2)

如果您在使用Symfony时遇到此问题,请尝试此hack:

打开:你的Symfony Root / vendor / doctrine / dbal / lib / Doctrine / DBAL / Types / DateTimeType.php

转到第50行宣布函数convertToDatabaseValue()的内容。

原始代码:

return ($value !== null)
        ? $value->format($platform->getDateTimeFormatString()) : null;

更改为:

 return ($value !== null)
            ? $value : null;

似乎Symfony在将字符串作为日期字符串传递时进行了额外的转换。

直接传递DateTime ojbect将不起作用,因为它会提示另一个错误,说“对象DateTime无法转换为字符串”。