0

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

$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;
}
?>

任何帮助深表感谢。我浏览了手册和许多帖子,但无法弄清楚为什么当我将日期传递给函数以对日期执行相同的格式设置时它不起作用。

4

1 回答 1

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'. 它可能会导致错误。

于 2013-09-22T03:52:33.653 回答