Se entendi bem, você precisa de uma função que te retorne datas específicas dentro de um período.
Criei a função abaixo dentro dos critérios que você apresentou. Espero que te ajude:
[code]<?php
/*
$dtini (string) > Data inicial no formato “yyyy-mm-dd”
$dtfin (string) > Data final no formato “yyyy-mm-dd”
$dias_a_mostrar (string) > Dias da semana a mostrar, por exemplo: “1,2,7” para mostrar “domingos, segundas e sábados”
*/
function fn_datas_especificas($dtini, $dtfin, $dias_a_mostrar)
{
$dtini = new DateTime($dtini);
$dtfin = new DateTime($dtfin);
$dtfin = $dtfin->modify("+1 day");
$intervalo = DateInterval::createFromDateString("1 day");
$periodo = new DatePeriod($dtini, $intervalo, $dtfin);
$datas = "";
foreach ($periodo as $data)
{
if(strpos($dias_a_mostrar, (string)($data->format("w") + 1)) !== false)
{
$datas .= $data->format("d-m-Y") . " - ";
}
}
$datas = substr($datas, 0, -3);
return $datas;
}
echo fn_datas_especificas(“2018-12-12”, “2019-01-21”, “2,4”);
?>[/code]