que necesito para dar salida a una lista de fechas (sólo los lunes y martes) para los próximos 12 meses desde la fecha actual, así:Conseguir todas las fechas de los lunes y martes para el próximo año
Ene 2010
mar 12 Ene 2010
lun 18 Ene 2010
Mar 19 Ene 2010
lun 25 Ene 2010
Feb 2010
mar 02 Feb 2010
lun 08 Feb 2010
mar 09 Feb 2010
lun 15 Feb 2010
mar 16 Feb 2010
lun 22 Feb 2010
Mar 2010
mar 09 Mar 2010
lun 15 Mar 2010
mar 16 Mar 2010
. ..
Al ser nuevo en PHP, califiqué strtotime y el bucle en las siguientes 52 semanas es la mejor manera de ir
$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker
// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));
// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) ||
!in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates)) {
// check if we have to show a new month
if(strcmp($monthReference, $currentMonth) <> 0){
echo $monthReference.'<br />',"\n";
}else{
// output the dates
echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";
echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
}
$currentMonth = date("M Y", strtotime('+'.$i.' Week'));
}
}
Sin embargo la salida de mi código es
Ene 2010
lun 18 Ene 2010
mar 12 Ene 2010
lun 25 Ene 2010
Mar 19 Ene 2010
Feb 2010
lun 08 feb 2010
mar 02 feb 2010
lun 15 Feb 2010
mar 09 Feb 2010
lun 22 Feb 2010
mar 16 Feb 2010
Mar 2010
lun 08 Mar 2010
mar 02 Mar 2010
lun 15 Mar 2010
mar 09 Mar 2010
lun 22 Mar 2010
mar 16 Mar 2010
lun 29 Mar 2010
mar 23 Mar 2010
Como puede ver, las fechas no están en el orden correcto y me siento perdido cuando me equivoco aquí.
¿Hay una manera más elegante/simple de resolver esto?
versión de PHP es utilizado 5.2.11 y no hay posibilidad de ir a un 5,3 en el corto plazo :-(
Gracias por su ayuda.
código de abajo modificación según lo sugerido por Aly. Se cambió la fecha de la computadora del martes, 01/12/2010 al miércoles, 13/01/2010 para probar la salida.
$blockedDatesInput = "08 Mar 2010,12 Apr 2010"; // dont show these dates
$blockedDates = explode ("," , $blockedDatesInput); // convert to array
$currentMonth = ""; // current month marker
// loop over the next 52 weeks to find Mondays and Tuesdays
for($i=0; $i<=52; $i++){
// build the month header
$monthReference = date("M Y", strtotime('+'.$i.' Week'));
// check if date exists in $blockeddate
if (!in_array(date("d M Y", strtotime('+'.$i.' Monday')), $blockedDates) ||
!in_array(date("d M Y", strtotime('+'.$i.' Tuesday')), $blockedDates)) {
// check if we have to show a new month
if(strcmp($monthReference, $currentMonth) <> 0){
echo $monthReference.'<br />',"\n";
}else{
// output the dates (changed the order as suggested by Aly)
echo date("D d M Y", strtotime('+'.$i.' Tuesday')).'<br />',"\n";
echo date("D d M Y", strtotime('+'.$i.' Monday')).'<br />',"\n";
}
$currentMonth = date("M Y", strtotime('+'.$i.' Week'));
}
}
Salida de nuevo en el orden incorrecto.
Ene 2010
Mar 19 Ene 2010
lun 18 Ene 2010
Mar 26 Ene 2010
lun 25 Ene 2010
Feb 2010
mar 09 Feb 2010
lun 08 Feb 2010
mar. 16 feb 2010
lun 15 feb 2010
mar 23 feb 2010
lun 22 feb 2010
vea mi respuesta editada – Aly