我试图通过$_POST
转换收到的日期,但我得到了
PHP致命错误:在非对象上调用成员函数format()
这是我的代码:
$time = $_POST['order_date'];
$date = DateTime::createFromFormat( 'Y-m-d H:i:s', $time, new DateTimeZone( 'America/New_York'));
$get_data = $date->format( 'Y-m-d H'); //here is the problem
我的代码有什么问题?
有人可以帮忙吗?
答案 0 :(得分:3)
您的$_POST['order_date']
输入似乎没有正确格式化。正如documentation所说,如果DateTime::createFromFormat
参数与给定的false
字符串不匹配,$time
会返回$format
,因此布尔类型(非对象)。
您应该验证$_POST
输入并通过检查
if(!($date instanceof DateTime))
{
// you, sir, entered an invalid date!
}
以防止这些错误。
答案 1 :(得分:3)
我的回答并未直接回答您的问题,但您可以尝试这样做。
您只需使用date和date_default_timezone_set
即可实现此目的date_default_timezone_set('America/New_York');
$time = $_POST['order_date'];
$date = date('Y-m-d H', strtotime($time));
但是,$_POST['order_date']
应该the valid format到strtotime。