2016-08-12 6 views
0

申し訳ありませんが、現在このセクションで問題が発生しています。私の日付形式はY-m-dPHPが特定の四半期に終了する

$date1 = '2016-03-1'; 
$date2 = '2016-07-1'; 
$date3 = '2016-10-1'; 
$date4 = '2016-12-1'; 

今日が2016-8-12の場合、次の期間以降は$ date3になるはずです。 私はif条件を使用しようとしましたが、最初の状態でしか落ちません。これについて私に啓発できますか?

私のコードは多少この

$today = date("2016-07-29"); 
if(strtotime($date1) < strtotime($today)){ 
     $next_accrual_date = $date1; 
     $date_condition = 'condition 1'; 
    }else 
    if(strtotime($date2) < strtotime($today)){ 
     $next_accrual_date = $date2; 
     $date_condition = 'condition 2'; 
    }else 
    if(strtotime($date3) < strtotime($today)){ 
     $next_accrual_date = $date3; 
     $date_condition = 'condition 3'; 
    }else 
    if(strtotime($date4) < strtotime($today)){ 
     $next_accrual_date = $date4; 
     $date_condition = 'condition 4'; 
    } 
echo $next_accrual_date." falls to ".$date_condition; 
+1

これまでに試したことを示してください。 –

+0

基本的に、現在の日付に最も近い4つの日付のうちの1つを選択しますか?あなたの現在の条件はどのように見えますか? – Rizier123

+0

あなたの完全なコードを共有 – C2486

答えて

1

のようにこれを行う1つの方法は

<?php 
$dates = array(); 
$dates[] = '2016-03-1'; 
$dates[] = '2016-07-1'; 
$dates[] = '2016-10-1'; 
$dates[] = '2016-12-1'; 

usort($dates, "cmp"); 

function cmp($a, $b){ 
    return strcmp($a, $b); 
} 

foreach($dates as $date){ 
    if($date > "2016-08-12"){ 
    echo $date; 
    break; 
    } 
} 

//print_r($dates); 

?> 

ライブデモです:https://eval.in/621460

これは出力が得られます:

2016-10-1 
1
$today = strtotime(date('Y-m-d')); 

    $currentYear = date('Y'); 
    $dates = ['q1' => strtotime($currentYear.'-03-1'), 
       'q2' => strtotime($currentYear.'-07-1'), 
       'q3' => strtotime($currentYear.'-10-1'), 
       'q4' => strtotime($currentYear.'-12-1')]; 

    foreach ($dates as $qName => $qDate) { 
     if ($qDate > $today) { 
      return "$qDate falls to $qName"; 
     } 
    } 
1

ただ>に<からあなたの比較を変更します。

$today = date("2016-07-29"); 
if(strtotime($date1) > strtotime($today)){ 
    $next_accrual_date = $date1; 
    $date_condition = 'condition 1'; 
}else ... 
echo $next_accrual_date." falls to ".$date_condition; 

そして、それは動作します。現在、あなたは今日が最初のクォーターの日付よりも大きいかどうかを見て、次にifを破ります。しかし、 '2016-03-1'の後のすべての日付はこの条件に当てはまります。だからこそ、あなたは常に状態1を取得します。

関連する問題