You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何将指定日期与缺失日期合并到同一数组?

解决方案:包含指定日期的完整月份日期数组

咱们先明确核心需求:你想要的结果是2019年4月1日至月末的所有日期,既要包含原代码找出的"缺失日期",也要把指定的$myDates数组中的日期纳入其中。本质上就是生成这个月份的完整日期列表,下面给你两种实现思路:

方式一:直接生成完整月份日期(简洁高效)

这种方式不需要依赖$myDates做判断,直接生成整个4月的所有日期,一步到位:

$myDates = array("2019-04-01", "2019-04-08");
$fullDates = array();

// 生成起始日期和月末日期
$dateStart = date_create("2019-04-01");
// 精准获取当月最后一天,避免原代码的日期bug
$dateEnd = date_create("2019-04-01")->modify('last day of this month');
$interval = new DateInterval('P1D');
// DatePeriod的结束日期是排他的,所以给月末日期加1天才能包含当天
$period = new DatePeriod($dateStart, $interval, $dateEnd->add($interval));

foreach($period as $day) {
    $fullDates[] = $day->format("Y-m-d");
}

echo '<pre>';print_r($fullDates);echo '</pre>';

关键说明:

  • 用modify('last day of this month')替代原代码的mktime写法,避免了原代码中月份参数错误导致的日期计算问题(原代码里mktime(0,0,0,0,1,2019)实际获取的是3月的天数)。
  • 给$dateEnd加一天是因为DatePeriod的结束日期是排他的,这样才能确保包含4月30日。

方式二:基于原代码逻辑修改(保留判断逻辑)

如果你想保留原代码的判断逻辑,只需要在循环结束后,把$myDates合并到结果中,再去重排序即可:

$myDates = array("2019-04-01", "2019-04-08");
$missingDates = array();

// 修复月末日期生成bug
$dateStart = date_create("2019-04-01");
$dateEnd = date_create("2019-04-01")->modify('last day of this month');
$interval = new DateInterval('P1D');
$period = new DatePeriod($dateStart, $interval, $dateEnd->add($interval));

foreach($period as $day) {
    $formatted = $day->format("Y-m-d");
    if(!in_array($formatted, $myDates))
        $missingDates[] = $formatted;
}

// 合并数组、去重并按日期排序
$resultDates = array_unique(array_merge($missingDates, $myDates));
sort($resultDates);

echo '<pre>';print_r($resultDates);echo '</pre>';

关键说明:

  • 先修复原代码的月末日期错误,确保遍历范围正确。
  • 用array_merge合并两个数组,array_unique去除重复项(避免重复添加$myDates中已有的日期),最后sort保证日期按顺序排列。

最终运行结果

两种方式都会输出2019年4月1日到30日的完整日期数组:

Array
(
    [0] => 2019-04-01
    [1] => 2019-04-02
    [2] => 2019-04-03
    ...
    [28] => 2019-04-29
    [29] => 2019-04-30
)

内容的提问来源于stack exchange,提问作者Agusto Nice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:20:10