我有一系列日期,这些日期填充了字符串格式化天数,按降序排列,彼此相差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天或更多天),则打印一个随机字符串,同时继续对$中的每个下一个值进行上述比较customdates array。
如果为$ monthdates数组找到“匹配”,则停止对其当前值进行比较,然后转到下一个值。 在我们的例子中,'2001-30-05'和'2001-29-05'仅相差1天。 当我们为$ monthdates数组中的每个值找到匹配项时,获取其下一个值。
答案 0 :(得分:2)
使用DateDiff和DateInterval来比较两个字符串。 阅读直至找到匹配项。然后我们可以打破。 如果没有匹配,我们就会结束并开始下一个。
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:我没有写打印随机字符串部分。从this SO问题
中取出