PHP DateTime:diff不适用于包含的文件

时间:2014-07-01 08:28:55

标签: php datetime

我有2个文件index.php和functions.php。 Functions.php包含我在index.php中使用的所有函数,它对一个函数的效果很好:

function diffSecBetweenDate($dateDebut,$dateFin)
{
    $dateTimeDebut =  DateTime::createFromFormat('d/m/y à H\hi',$dateDebut);
    $dateTimeFin =  DateTime::createFromFormat('d/m/y à H\hi',$dateFin);
    $dateDifference = $dateTimeDebut->diff($dateTimeFin);

    $seconds = $dateDifference->days * 24 * 60 * 60;
    $seconds += $dateDifference->h *3600;
    $seconds += $dateDifference->i *60;
    $seconds += $dateDifference->s ;
    return $seconds;
}

我的包括:

include('include/functions.php');

如果我的函数在index.php中,它可以正常工作。如果我的函数在functions.php中,我得到了这个:

PHP Fatal error:  Call to a member function diff() on a non-object in /var/www/acad/include/functions.php on line 235

所有功能都很好......

你有什么想法吗?

编辑1:

我不知道PHP何时崩溃,但您会在下面找到我的代码摘录:

$dateReset = '20/03/2012 à 12h00';
$dateNow = new DateTime();
$dateObjectReset = DateTime::createFromFormat('d/m/Y à H\hi',$dateReset);
$dateObjectReset->format('d/m/y à H\hi');

$dateNow = $dateNow->format('d/m/y à H\hi');
$dateObjectReset = $dateObjectReset->format('d/m/y à H\hi');

$referenceT = diffSecBetweenDate($dateObjectReset, $dateNow);

我使用VIM所以当我移动我的功能时我会这样做:shit + v => d => ctrl-w => p 所以我不写任何东西,不能重命名! ^^

编辑2:

错误是关于不同的编码。

致以最诚挚的问候,

3 个答案:

答案 0 :(得分:0)

主要原因是变量说示例$dateTimeDebut不是DateTime对象

它应该类似于

之类的东西
$dateTimeDebut= new DateTime();

答案 1 :(得分:0)

我发现了错误......问题是“à”使用不同的编码:

createFromFormat('d/m/y à H\hi',$dateDebut)

index.php encoding = utf-8 function.php encoding = latin9

如果编码相同,它就可以了!

答案 2 :(得分:-1)

您将DateTime传递给您的函数,并且您希望在DateTime中对其进行转换。我认为这是你的问题。你可以删除这两行:

$dateTimeDebut =  DateTime::createFromFormat('d/m/y à H\hi',$dateDebut);
$dateTimeFin =  DateTime::createFromFormat('d/m/y à H\hi',$dateFin);

使用$ dateDebut和$ dateFin insted。