我目前正在使用填充事件的数据库的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');
}
所以这给了我系列中的第一个日期,但我需要今天之后的第一个日期。有没有人提出建议?
提前致谢
答案 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