php out of string 变量的算术运算

Arithmetic operation in php out ot string variable

我有一个奇怪的问题。我这样做:

        $expdatek = explode(".",$datumk);
        $expdated = explode(".",$datumd);
        if($expdatek[2] == $expdated[2]){
            $monthk = intval(ltrim($expdatek[1], '0'));
            $monthd = intval(ltrim($expdated[1], '0'));
            $interval = $monthd - $monthk;
        }

变量 $datumk 和 $datumd 的格式如下:“26.02.2016”。 我试图证明年份是否相同,如果发生这种情况,我只想计算两个月之间的差值。 由于某些原因,我没有从 $interval 中得到任何输出。他只是不做算术运算。如果我像这样回声:"echo $monthd" 和 "echo $monthk"。他正确显示了没有前导零的月份,但他没有进行算术运算。

为什么? 我认为 PHP 将变量的格式更改为执行此操作所需的格式。我通过实践学习了 PHP,它一直有效,除了现在。我不明白。 有什么提示吗?

如果是日期,尝试使用DateTime library to perform the arithmetic operation. The method DateTime::diff计算两个日期之间的差异:

$date1 = \DateTime::createFromFormat("d.m.Y" , "27.03.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");

$diff = $date1->diff($date2 , true);

echo $diff->format("months: %m. Total days: %a");

DateTime 对象可以提供 strict comparison:

$date1 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");

if ($date1 == $date2)
{
    echo 'they\'re equals';
}

如果您在这两个日期之间需要任何其他验证,您可以 DateTime::format:

$date1 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");
$date2 = \DateTime::createFromFormat("d.m.Y" , "26.02.2016");

if ($date1->format("m") == $date2->format("m"))
{
    echo 'the months are equals';
}

所以,如果你需要做一些计算:

$expdatek = \DateTime::createFromFormat("d.m.Y" , $datumk);
$expdated = \DateTime::createFromFormat("d.m.Y" , $datumd);

if($expdatek->format('Y') == $expdated->format('Y')){
    $interval = $expdatek->diff($expdated , true);

    var_dump($interval);
}

代码很好。问题是,变量之前在函数中定义为字符串。我重新声明了它,但显然它仍然存在一些问题。重命名它,解决了问题。非常感谢。