2009-02-13 13 views
5

Poco atascado sobre cómo hacerlo. Dado el mes actual, necesito devolver la fecha del cuarto sábado de cada mes.calcular la fecha del cuarto sábado en el mes actual

p. Ej. Este mes sería el 20 de febrero, el próximo sería el 27 de marzo.

Gracias

+0

Por cierto, sería el 28 de febrero y marzo. – kmkaplan

+0

No es tan incidental dado que febrero tiene 28 días, que es divisible por 7. No es válido para años bisiestos por supuesto. –

Respuesta

7

No soy un programador PHP, sin embargo, parece strtotime es lo que está buscando.

Puede usar strtotime ("cuarto sábado") y devolverá el 4º sábado.

Eche un vistazo a los documentos strtotime.

EDIT:

sólo para hacer la respuesta completa, gracias a Tom y Paul Dixon

date('dS F',strtotime('Fourth Saturday '.date('F o'))); 
+0

De acuerdo con el enlace, no hay ninguna indicación de que" cuarto sábado "pueda analizar con precisión. – Elie

+0

Sí funciona. Comprobé la fuente de PHP para aclaración, pero es un analizador generado generado por Yacc legible. He modificado mi respuesta para mencionarlo. –

+0

Sí, funciona, puede hacer algo como date ('dS F', strtotime ('Fourth Saturday' .date ('F o'))), y funciona como un regalo. – Tom

2

Encuentra el primer sábado del mes, y luego añadir tres semanas a eso.

Si no sabe cuándo es el primer sábado (o, mejor dicho, no conoce específicamente una fecha que corresponda con el nombre de un día), es posible que desee consultar el Doomsday algorithm, que consulté convenientemente para otro publicar con un problema algo similar.

3

La fecha más temprana para el cuarto sábado es el día 22 del mes. Así que mira el día 22, mira qué día de la semana es, si no es sábado, agrega un día a la fecha y vuelve a verificar, hasta que encuentres una coincidencia (el máximo que deberías verificar es de 6 días).

-1

en PHP en lugar de pseudo-código (piensa requiere 5,2)

$date = getdate(); 
$date-> setDate($date->format('Y'), $date->format('Y'), '1'); // 1st of month. 
while ($date->format('w' != 6) 
    $date->modify("+1 day"); 
$date->modify("+21 day"); // date is now on the fourth saturday 
+0

¿Por qué esto se revocó? Debería ser "! = Sábado" en lugar de "!= Sunday ", pero el proceso parece correcto ... –

+0

se perdió por completo el sábado/domingo, tah – ShuggyCoUk

7

Puede utilizar strtotime para encontrar "el próximo sábado", basado en una fecha de inicio. Si esta fecha de inicio es el día antes de la fecha más temprana posible precedente (21) obtenemos la respuesta ...

//required year/month 
$yyyymm="2009-01"; 

//find next saturday after earliest possible date 
$t=strtotime("next saturday", strtotime("{$yyyymm}-21")); 

//here you go! 
echo "4th saturday of $yyyymm is ".strftime("%Y-%m-%d",$t)."\n"; 

más temprana posible cuarta repetición de un día de cualquier mes es el día 22 (1,8,15, 22), la última posible 4ta repetición es 28 (7,14,21,28).

EDITAR: Aunque no está claro en la documentación, puede solicitar el "cuarto Sábado" también - usar el día cero del mes como base:

$t=strtotime("fourth saturday", strtotime("{$yyyymm}-00")); 

u omitir el tiempo de base y especificar el mes y el año directamente:

$t=strtotime("fourth saturday feb 2009"); 

punta del sombrero a Robin "no soy un programador PHP" Día para observar que :)

+0

Su solución es correcta, pero en su segunda oración creo que quiere decir "... el último posible tercer viernes (21) ...". :-) –

+0

podría formularse mejor sí, lo hará enmendar –

0
function fourth_saturday($year, $month) 
{ 
    $info = localtime(mktime(0, 0, 0, $month , 1, $year)); 
    return 28 - $info[6]; 
} 
Cuestiones relacionadas