循环多个日期

时间:2013-06-16 12:00:33

标签: php api date loops

我目前正在使用填充事件的数据库的API处理一个小日历。 (我无法控制数据库的内容)。但是数据库中的事件包含不同的日期格式。 (有些只是dd-mm-yy,有些像'星期三12/06/13',有些是多个约会'12/06 / 13,13 / 06 / 13,14 / 06/13',...等等。)

所以我唯一的问题是多个约会在一起,因为我需要今天之后的第一个约会。

示例:数据库包含:12/06 / 13,13 / 06 / 13,14 / 06 / 13,15 / 06 / 13,17 / 06/13 - >我需要17/06/13。

使用当前代码我删除了不同的符号,因此我只剩下数字,并将前6个数字转换为日期:

foreach($events as $e)
{
    $start = 0;
    $length = 6;
    $rawDate = $e->calendarsummary;
    $filterDate = preg_replace("/[^0-9]/", "", $rawDate);
    $oneDate = substr($filterDate, $start, $length);
    $finalDate = DateTime::createFromFormat('dmy', $oneDate);
    echo $finalDate->format('l j/m/y');
}

所以这给了我系列中的第一个日期,但我需要今天之后的第一个日期。有没有人提出建议?

提前致谢

2 个答案:

答案 0 :(得分:0)

您需要使用PHP的$rawDate函数检查strpos()是否有逗号。如果不存在逗号,请继续正常操作。

但是,如果找到逗号,则需要使用PHP explode()函数将日期字符串分解为日期数组。如果它们不是日期顺序,则需要使用PHP的usort()函数对数组进行排序。按顺序完成它们后,您可以遍历它们并选择第一个日期大于今天的第一个。一旦你有了那个日期,你就可以正常进行。

显然,可能有50种不同的方法来实现这一目标,

如果你让我发布你已经尝试过的内容,我很乐意帮你散列代码。

foreach($events as $e){
    $start = 0;
    $length = 6;
    $rawDate = $e->calendarsummary;

    if (strpos($rawDate, ',')!==false){ //Comma Found, do Explode
        $dates = explode(',', $rawDate);
        usort($dates, 'sortDates');


        foreach($dates as $d){
            $tempDate = new DateTime($d);
            //Do date calculations here to see if the date is beyond today's date.

            //if it is, set $rawDate = $d and continue
            if (...){
                $rawDate=$d;
                break;
            }
        }
    }


    $filterDate = preg_replace("/[^0-9]/", "", $rawDate);
    $oneDate = substr($filterDate, $start, $length);
    $finalDate = DateTime::createFromFormat('dmy', $oneDate);
    echo $finalDate->format('l j/m/y');
}

function sortDates($aItem, $bItem){
    $temp = new DateTime($aItem);
    $a = $temp->getTimestamp();

    $temp = new DateTime($bItem);
    $b = $temp->getTimestamp();

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

更多信息:

答案 1 :(得分:0)

当您使用DateTime类时,您可以进行直接比较,如下所示: -

$dateString = "12/06/13, 13/06/13, 14/06/13, 15/06/13, 17/06/13, 20/06/13";

$dates = explode(', ', $dateString);
$now = new DateTime();
foreach($dates as $date){
    $dateTime = DateTime::createFromFormat('d/m/y', $date);
    if($dateTime > $now){
        $result = $dateTime;
        break;
    }
}

echo $result->format('d/m/y');

输出: -

  

17/06/13