2016-04-27 8 views
0

本質的に私が達成しようとしているのは、配列から次に来る予定を取得することです。私は配列を掲示し、どのように現在の日付を選択したのですか?アレイから選択する次の次の日付

私が何をしようとしている
$payout_dates = array('16-04-14','16-04-28','16-05-14'); 
$currentdate = date('y-m-d'); 

今日は16-04-27ある例えばのでcurrent dateを使用してアレイから次の今後の日付を選択しているので、次の今後の日は、私の下に16-04-28だろうコードイムを貼り付けするつもりです以下のコードを変更する唯一の問題は、それがselectのために使用され、日付自体をエコーアウトするのに苦労していることです。

<?php 
    foreach ($payout_dates as $i => $d) { 
    if ($currentdate >= $d && ($i == count($date)-1 || $currentdate < $date[$i+1])) { 
     $selected = "selected"; 
     $selected_int = $i; 
    } else { 
     $selected = ""; 
    } 
    list($year, $month, $day) = explode('-', $d); 
    echo "<option $selected>" . date("m/d/Y", strtotime($d)) . "</option>"; 
} 
?> 

私が抱えている問題を再現することは、現在の日付から次の今後の日付を選択することです。

+1

は、変換するために、[のstrtotime()を](http://php.net/manual/en/function.strtotime.php)を使用します日付を整数(タイムスタンプ)に変換します。それは比較しやすくなります。 – BeS

答えて

0
$payout_dates = array('16-04-14','16-04-28','16-05-14'); 
$currentdate = date('y-m-d'); 

: - このような何かが、私は故意にソート作品を証明する最も古い年代の日付であることを最後の配列要素を変更した注意します日付の辞書式順序があるので、文字列比較を使用して日付を選択するために使用されます。

$found = false; 
foreach ($payout_dates as $i => $d) { 
    if (! $found && strcmp($currentdate, $d) < 0) { 
     $found = true; 
     $selected = ' selected="selected"'; 
    } else { 
     $selected = ""; 
    } 
} 
echo "<option $selected>" . date("m/d/Y", strtotime($d)) . "</option>"; 

そうでない場合は、次の解決策となるだろう:

$payout_times = array_map('strtotime', $payout_dates); 
$currenttime = strtotime(date('y-m-d')); 

$found = false; 
foreach ($payout_times as $i => $d) { 
    if (! $found && strcmp($currenttime, $d) < 0) { 
     $found = true; 
     $selected = ' selected="selected"'; 
    } else { 
     $selected = ""; 
    } 
} 
echo "<option $selected>" . date("m/d/Y", $d) . "</option>"; 
+0

素晴らしい答えをいただきありがとうございます。 –

0

日付をPHP DateTimeオブジェクトに変換する場合は、配列に対してsort()を呼び出すことができます。あなたはstrtotime()次かもしれないを使用して日付を変換したくない場合は

<?php 
$payout_dates = array(new DateTime('16-04-14'), new DateTime('16-04-28'), new DateTime('16-03-14')); 
sort($payout_dates); 

foreach($payout_dates as $i => $date) { 
    [...] 
} 
+0

非常に便利です。 –

関連する問題