2017-03-27 18 views
0

이상한 문제가 있습니다. 나는이 작업을 수행 : "2016년 2월 26일"PHP에서 산술 연산 ot 문자열 변수

 $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 같은 형식으로왔다. 나는 한 해가 동일하면 proove를 시도하고, 이런 일이 생기면 두 달 간의 차이점을 얻고 싶습니다. 일부 reasone의 경우 $ out of out 간격의 출력이 없습니다. 그는 산수 연산을하지 않습니다. "echo $ monthd"와 "echo $ monthk"같은 echo를하면. 그는 제로가없는 달을 올바르게 보여 주지만 그는 제 작 작전을하지 않습니다.

왜? PHP는 변수의 형식을이 작업을 수행하는 데 필요한 형식으로 변경한다고 생각했습니다. 나는 PHP로 학습을하고 그것은 항상 효과가있다. 나는 그것을 이해하지 못한다. 힌트가 있습니까?

+0

나를 위해 잘 작동합니다. https://3v4l.org/uRakb [mcve] – Rizier123

답변

0

코드는 괜찮습니다. 문제는 이전에 변수가 문자열로 정의되었다는 것입니다. 나는 그것을 재 선언했지만, 분명히 몇 가지 문제가 여전히 남아있다. 이름을 변경하고 문제를 해결하십시오. 전혀.

0

날짜가 맞으면 DateTime 라이브러리를 사용하여 산술 연산을 수행하십시오.

$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 : : 방법 DateTime::diff는 두 날짜 사이의 차이를 계산

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

, 당신은 몇 가지 CALC 할 필요가있는 경우 :

012,351을
$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); 
} 
+0

답장을 보내 주십시오. ... 정확한 달 차이 만 알기를 원하지 않기 때문에 제 작전이 필요합니다. 내 코드에서 실수는 어디에서 발생합니까? –

+0

@SergiuLongodor 질문에 설명 된대로 제 답변이 작동합니다. 두 스크립트 모두 수정하고 교체 할 수 있습니다. –

+0

@SergiuLongodor는 실수가없는 것 같습니다. 그러나 DateTime은 모든 날짜 (또는 시간) 산술 연산을 수행하는 것이 좋습니다. –