从下一个即将到来的日期中选

时间:2016-04-27 21:49:52

标签: php arrays date

基本上我正在努力实现的是从数组中获取下一个即将到来的日期。下面我发布了我的数组以及如何选择当前日期。

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

我要做的是使用current date从数组中选择下一个即将到来的日期,例如今天是16-04-27所以下一个即将到来的日期将是16-04-28我将使用以下代码来粘贴代码以选择下一个即将到来的日期,但是更改下面代码的唯一问题是它用于select,因此只是使用它来回显日期本身就会遇到麻烦。 / p>

<?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>";
 }
?>

重新解决我遇到的问题是从当前日期选择下一个即将到来的日期。

2 个答案:

答案 0 :(得分:0)

如果将日期转换为PHP DateTime对象,则可以在数组上调用sort()。这样的事情 - 请注意我故意将最后一个数组元素更改为最早的时间顺序日期来证明排序有效:

<?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) {
     [...]
}

答案 1 :(得分:0)

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

如果您不想使用strtotime()转换日期,则可能会使用以下内容来使用字符串比较来选择日期,因为您在日期上有字典顺序。

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