2010-12-14 31 views
13

Duplicar posible:
Get first day of week in PHP?Encontrar Primer día de la semana a través de php

Hola,

Quiero encontrar primera y la última fecha de la semana en curso y la semana pasada. De manera similar, quiero encontrar la primera y la última fecha del mes actual y el mes pasado.

Esto tiene que hacerse en PHP. Por favor ayuda.

+0

Ver también: http://stackoverflow.com/questions/1897727/get-first -day-of-week-in-php –

+3

* (referencia) * [Formatos de fecha relativos en PHP] (http://de2.php.net/manual/en/datetime.formats.relative.php) – Gordon

Respuesta

42

strtotime es bastante potente con relative time formats:

strtotime('monday this week'); 
strtotime('sunday this week'); 
strtotime('monday last week'); 
strtotime('sunday last week'); 

(esto sólo funciona con PHP 5.3+)

strtotime('first day of this month'); 
strtotime('last day of this month'); 
strtotime('first day of last month'); 
strtotime('last day of last month'); 

Con el fin de conseguir el primero y el último día de un mes en PHP < 5.3, puede usar una combinación de mktime y date (date('t') indica el número de días del mes):

mktime(0,0,0,null, 1); // gives first day of current month 
mktime(0,0,0,null, date('t')); // gives last day of current month 

$lastMonth = strtotime('last month'); 
mktime(0,0,0,date('n', $lastMonth), 1); // gives first day of last month 
mktime(0,0,0,date('n', $lastMonth), date('t', $lastMonth); // gives last day of last month 

Si lo que desea es obtener una cadena para su presentación, a continuación, no es necesario mktime:

date('Y-m-1'); // first day current month 
date('Y-m-t'); // last day current month 
date('Y-m-1', strtotime('last month')); // first day last month 
date('Y-m-t', strtotime('last month')); // last day last month 
+0

Proporcionó una excelente solución. Desafortunadamente, esto solo funciona en PHP5.3 y no en 5.2. Tengo PHP 5.2.14. ¡Y esto no funcionó! –

+1

@ user365870: Es cierto que no está documentado en ninguna parte, solo lo leí en el comentario de la página ... de todos modos, vea mi respuesta actualizada. –

+0

¡Gracias! Esto funcionó perfectamente. Muchas gracias. –

3

Aquí es una función para el primer y último día de la semana:

function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y') 
{ 
    $wk_ts = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101')); 
    $mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts); 
    return date($format, $mon_ts); 
} 

$sStartDate = week_start_date($week_number, $year); 
$sEndDate = date('F d, Y', strtotime('+6 days', strtotime($sStartDate))); 

Probablemente se puede adaptar para hacer meses así, pero yo quería que mi respuesta en! :)

+0

De hecho encontré la publicación del foro a la que hace referencia en Google, gracias :) ... ni siquiera vi su respuesta de ese otro hilo de stackoverflow ... – prilldev

+0

Ok, entonces retiro mi comentario :) –

+0

Esto también funcionó para mí. Gracias –

Cuestiones relacionadas