我有一个奇怪的问题。我这样做:
$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”。 如果年份相同,我会尝试证明,如果发生这种情况,我只想在两个月之间取得差异。 对于一些reasone,我没有得到$ interval的任何输出。他只是不做算术运算。如果我做一个回声:“echo $ monthd”和“echo $ monthk”。他正确地显示了没有前导零的月份,但是他没有进行arithemic Operation。
为什么呢? 我认为PHP会将变量的格式更改为执行此操作所需的内容。我通过这种方式学习PHP,并且它总是起作用,现在除外。我不明白。 任何提示?
答案 0 :(得分:0)
如果是日期,请尝试使用DateTime库执行算术运算。方法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);
}
答案 1 :(得分:0)
守则很好。问题是,变量之前在函数中定义为字符串。我重新宣布了它,但它显然仍有一些问题。重命名,解决了问题。总的来说。