0

我有一个日期数组,其中填充了字符串格式的天数,这些天数按降序排列,彼此相差 30 天。31 天的月份已经转换为 30 天的月份。

$monthdates = array('2001-29-05','2001-29-06','2001-29-07','2001-29-08','2001-29-09','2001-29-10');

我还有另一个数组,其中包含按降序排列的字符串格式的天数,这些天数在上述数组中的日期范围内,如下所示:

$customdates = array('2001-30-05','2001-31-05','2001-01-06','2001-02-06',2001-03-06);

...说这个数组的最后一个值是'2001-29-11'。

我想要的是在一个循环(或更可能是两个)内遍历数组并将 $monthdates 的当前日期与 $customdates 数组中的日期进行比较,如果 $customdates 数组中的日期较新,则回显某些内容(无论如何)并且比 $monthdates 数组中的日期正好 20 天。

例如:$customdates 数组中的“2001-30-05”比 $monthdates 数组中的“2001-29-05”更新。在这种情况下,我们应该计算出这两天的数值差异,如果超过 20 天(彼此相差 20 天或更长时间),则打印一个随机字符串,同时继续对 $ 中的每个下一个值进行上述比较自定义日期数组。

如果为 $monthdates 数组找到“匹配”,则停止对其当前值进行比较并继续下一个值。在我们的示例中,“2001-30-05”和“2001-29-05”仅相差 1 天。当我们为 $monthdates 数组中的每个值找到匹配项时,获取它的下一个值。

4

1 回答 1

2

使用DateDiffDateInterval比较两个字符串。阅读直到我们找到匹配项。然后我们就可以破解了。如果没有匹配,我们将结束并开始下一个。

foreach($monthdates as $date){
     $dateObject = date_create($date);
     foreach ($customdates as $custDate){
         $dateCustomObject = date_create($custDate);
         date_diff($dateCustomObject, $dateObject)->days >= 20 ?
             substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 15) :
             break;
     }
}

PS:我没有写打印随机字符串部分。从这个SO question

于 2013-06-03T22:53:13.143 回答