DateTime对象在传递日期时抛出错误

时间:2013-09-22 03:45:53

标签: php datetime

我使用以下代码,它工作正常。

$boosterDate1 = $_POST['boosterDate1'];
//$boosterDate1 = changeDateFormat($boosterDate1);

date_default_timezone_set('America/Chicago');
$myDateTime = new DateTime;
$myDateTime = $myDateTime->createFromFormat('m/d/y', $boosterDate1);
$boosterDate1 = $myDateTime->format('Y-m-d');

我遇到的问题是当我创建一个函数并尝试在多个日期多次调用它时。出于某种原因,当我将日期传递给以下函数时,我收到以下错误:

致命错误:在非对象

上调用成员函数format()
<?php 
function changeDateFormat($dateString){
    date_default_timezone_set('America/Chicago');
    $myDateTime = new DateTime;
    $myDateTime = $myDateTime->createFromFormat('m/d/y', $dateString);
    $newDateString = $myDateTime->format('Y-m-d');
    return $newDateString;
}
?>

非常感谢任何帮助。我查看过手册并通过很多帖子虽然无法弄清楚为什么当我将日期传递给函数以在日期执行相同的格式化时它不起作用。

1 个答案:

答案 0 :(得分:0)

createFromFormat()static构造函数。

请改用:

$date = DateTime::createFromFormat('m/d/y', $dateString);

另外,检查$_POST['boosterDate1']内容。如果它无效,那么createFromFormat()会根据手册返回false(不是对象):

  

返回新的DateTime实例,或者失败时返回FALSE。


通过测试改进了功能:

<?php
header('Content-Type: text/plain; charset=utf-8');

date_default_timezone_set('America/Chicago');

$check = '12/20/14';

function changeDateFormat($dateString){
    $myDateTime = DateTime::createFromFormat('m/d/y', $dateString);
    return $myDateTime->format('Y-m-d');
}

echo changeDateFormat($check);
?>

节目:

2014-12-20

如果您使用的是长年代表,请将'm/d/y'更改为'm/d/Y'。它可能会导致错误。