w3schools - Cómo obtener la fecha para las vacaciones usando php
date('' ymd strtotime php (4)
Por ejemplo el:
- 3er lunes de enero para el día de Martin Luther King
- 3er lunes de febrero para el Día de los Presidentes (cumpleaños de Washington)
- Último domingo de marzo por la Pascua.
- Último lunes de mayo para el Día de los Caídos
Estoy tratando de obtener estas fechas para poder marcarlas en mi calendario sin tener que poner todo manualmente en los próximos años.
RESPUESTA MODIFICADA !!
$curYir = date("Y");//current year
$MLK = date(''Y-m-d'', strtotime("january $curYir third monday")); //marthin luthor king day
$PD = date(''Y-m-d'', strtotime("february $curYir third monday")); //presidents day
$Est = date(''Y-m-d'', easter_date($curYir))); // easter
$MDay = date(''Y-m-d'', strtotime("may $curYir first monday")); // memorial day
//("may $curYir last monday") will give you the last monday of may 1967
//much better to determine it by a loop
$eMDay = explode("-",$MDay);
$year = $eMDay[0];
$month = $eMDay[1];
$day = $eMDay[2];
while($day <= 31){
$day = $day + 7;
}
if($day > 31)
$day = $day - 7;
$MDay = $year.''-''.$month.''-''.$day;
$LD = date(''Y-m-d'', strtotime("september $curYir first monday")); //labor day
$CD = date(''Y-m-d'', strtotime("october $curYir third monday")); //columbus day
$TH = date(''Y-m-d'', strtotime("november $curYir first thursday")); // thanks giving
//("november $curYir last thursday") will give you the last thursday of november 1967
//much better to determine it by a loop
$eTH = explode("-",$TH);
$year = $eTH[0];
$month = $eTH[1];
$day = $eTH[2];
while($day <= 30){
$day = $day + 7;
}
if($day > 30)
//watch out for the days in the month November only have 30
$day = $day - 7;
$TH = $year.''-''.$month.''-''.$day;
De esta manera funcionó para mí.
function observed_date($holiday){
$day = date("w", strtotime($holiday));
if($day == 6) {
$observed_date = $holiday -1;
} elseif ($day == 0) {
$observed_date = $holiday +1;
} else {
$observed_date = $holiday;
}
return $observed_date;
}
function get_holiday($holiday_name) {
$currentYear = date(''Y'');
switch ($holiday_name) {
// New Years Day
case "new_year":
$holiday = observed_date(date(''Ymd'', strtotime("first day of january $currentYear")));
break;
// Martin Luther King, Jr. Day
case "mlk_day":
$holiday = date(''Ymd'', strtotime("january $currentYear third monday"));
break;
// President''s Day
case "presidents_day":
$holiday = date(''Ymd'', strtotime("february $currentYear third monday"));
break;
// Memorial Day
case "memorial_day":
$holiday = (new DateTime("Last monday of May"))->format("Ymd");
break;
// Independence Day
case "independence_day":
$holiday = observed_date(date(''Ymd'', strtotime("july 4 $currentYear")));
break;
// Labor Day
case "labor_day":
$holiday = date(''Ymd'', strtotime("september $currentYear first monday"));
break;
// Columbus Day
case "columbus_day":
$holiday = date(''Ymd'', strtotime("october $currentYear second monday"));
break;
// Veteran''s Day
case "veterans_day":
$holiday = observed_date(date(''Ymd'', strtotime("november 11 $currentYear")));
break;
// Thanksgiving Day
case "thanksgiving_day":
$holiday = date(''Ymd'', strtotime("november $currentYear fourth thursday"));
break;
// Christmas Day
case "christmas_day":
$holiday = observed_date(date(''Ymd'', strtotime("december 25 $currentYear")));
break;
default:
$holiday = "";
break;
}
return $holiday;
}
Luego, puede imprimir las vacaciones llamando a la función echo get_holiday(''new_year'');
Y el resultado para 2015 debería ser 20150101
La función strtotime es útil aquí, pero parece tener algunas peculiaridades sobre cómo interpreta el lenguaje inglés. Asegúrese de revisar su redacción con cuidado y verifique sus resultados.
Por ejemplo, esto parece que debería funcionar, ¡pero volverá el último lunes de abril ($ currentYear = 2014)!
echo "Memorial Day " . date(''F d, Y'', strtotime("may $currentYear last monday")) . "<br />";
Sin embargo, esta fraseología devolverá las vacaciones correctas para 2014.
echo "Memorial Day " . date(''F d, Y'', strtotime("last monday of May $currentYear")) . "<br />";
Y esto le dará la fecha correcta para las vacaciones del próximo año.
echo "Memorial Day " . date(''F d, Y'', strtotime("last monday of May $currentYear+1")) . "<br />";
La página de documentos PHP tiene comentarios adicionales sobre su uso. Cuídate
Puede aprovechar esta función de php. strtotime
$currentYear = date("Y");
Día de MLK -
echo date(''Y-m-d'', strtotime("third monday of january $currentYear"));
Día del Presidente -
echo date(''Y-m-d'', strtotime("third monday/OD February $currentYear"));
Pascua
echo date(''Y-m-d'', strtotime("last sunday of march $currentYear"));
Día Conmemorativo -
echo date(''Y-m-d'', strtotime("last monday of may $currentYear"));
Solución para mudarse a días festivos en Alemania: devuelve una serie de cadenas formadas con ''Ymd'' que incluyen Viernes Santo, Lunes de Pascua, Ascensión y Lunes de Pentecostés. Se crea un nuevo objeto DateTime para Semana Santa para cada día para mejorar la legibilidad.
function beweglicheFeiertage( int $year ):array
{
//Karfreitag - good friday
$return = array();
$easterDate = DateTime::createFromFormat(''U'', easter_date($year) );
$easterDate->modify(''- 1 days'');
$return[] = $easterDate->format(''Y-m-d'');
//Ostermontag easter monday
$easterDate = DateTime::createFromFormat(''U'', easter_date($year) );
$easterDate->modify(''+ 2 day'');
$return[] = $easterDate->format(''Y-m-d'');
//Himmelfahrt ascencion
$easterDate = DateTime::createFromFormat(''U'', easter_date($year) );
$easterDate->modify(''+ 40 days'');//go to Ascencionday
$return[] = $easterDate->format(''Y-m-d'');
//Pfingstmontag - pentecost monday
$easterDate = DateTime::createFromFormat(''U'', easter_date($year) );
$easterDate->modify(''+ 51 days'');//go to Pentecost Monday
$return[] = $easterDate->format(''Y-m-d'');
return $return;
}