2017-03-27 8 views
0

私は奇妙な問題があります。私はこれを行います:php out演算子の文字列変数

 $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"のような形式です。 年が同じであれば私はprooveしようとしています、そして、これが起こるなら、私は2ヶ月の間に差をつけたいと思っています。 いくつかのreasoneでは、私は$ out of out間隔のアウトプットを得ていません。彼はちょうど算術演算をしない。私が "echo $ monthd"と "echo $ monthk"のようなエコーをする場合。彼は先行ゼロを持たない月を正確に示しているが、彼は術前手術をしていない。

なぜですか? 私は、PHPが変数のフォーマットを、この操作を行うために必要なものに変更すると考えました。私はそれを行うことによってPHPを学習し、それは今、今のところうまくいきました。私はそれを理解していない。 ヒント?

+0

私にとってうまく動作します:https://3v4l.org/uRakb [mcve] – Rizier123

答えて

0

コードは問題ありませんでした。問題は、変数が関数内で文字列として定義されていたことです。私はそれを再宣言しましたが、明らかにいくつかの問題が残っていました。名前を変更して、問題を解決しました。すべてのthx。

0

日付の場合は、DateTimeライブラリを使用して算術演算を実行してみてください。この方法DateTime::diffは、2つの日付の差を計算します。

$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"); 

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

、あなたには、いくつかのcalc行う必要がある場合:

$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は間違いないようです。ただし、Date(またはTime)算術演算を実行する場合は、DateTimeを使用することをお勧めします。 –

関連する問題