2010-06-02 28 views
10

Necesito encontrar la fecha del lunes de la semana actual. ¿Cómo puedo hacer esto en PHP 4?Obtener la fecha del lunes en la semana actual en PHP 4

+1

Realmente siento por tener que trabajar en PHP4, porque la funcionalidad fecha de PHP5 es * waaaay * mejor.También PHP4 ha sido oficialmente End-of-Life desde hace un tiempo, por lo que no tendrá más parches y probablemente sea inseguro; de todos modos, ya no debería estar en producción. – Spudley

Respuesta

6
echo date('Y-m-d', strtotime('previous monday')); 

Solo una nota, sin embargo. Desea asegurarse de que no sea lunes hoy, de lo contrario obtendrá la fecha anterior lunes, como se indica. Usted puede hacerlo de la siguiente manera

if (date('w') == 1) 
{ 
    // today is monday 
} 
else 
{ 
    // find last monday 
} 
+0

Esto da una fecha de hace una semana si hoy es un lunes. – nickf

+0

@nickf: ver la respuesta actualizada. Lo recordé después de publicar ... :) –

+1

Ten cuidado con la verbosidad que usas con strtotime, el "lunes anterior" te llegará hace una semana los lunes, cuando realmente quieres el día actual. IIRC, esta semana en php significa de lunes a domingo, pero si aplicara su respuesta para encontrar la fecha del martes, por ejemplo, esto le daría el resultado incorrecto tanto el lunes como el martes. –

9
echo date('Y-m-d',time()+(1 - date('w'))*24*3600); 

Para la próxima semana:

echo date('Y-m-d',time()+(8 - date('w'))*24*3600); 

1 para el lunes, 2 Martes, 3 Miércoles y así sucesivamente. Pruebalo.

+0

1 para lunes, 2 martes, 3 miércoles y así sucesivamente :) intentarlo ... – apis17

+0

este es más válido – r4ccoon

+2

¡Bueno, esto no da el lunes anterior si prueba este código el domingo! – ErcanE

0

Mi intento:

<?php 
$weekday = date("w") - 1; 
if ($weekday < 0) 
{ 
    $weekday += 7; 
} 
echo "Monday this week : ", date("Y-m-d",time() - $weekday * 86400) , "\n"; 
?> 
12

Prueba esto:

return strtotime('last monday', strtotime('next sunday')); 
+0

¿Y si hoy es domingo? :) –

+0

@ mr.b - entonces todavía debe actuar como se desee (suponiendo que el domingo es el comienzo de la semana) – nickf

+0

Esta es mi solución favorita para recibir el lunes a las 00:00:00. Otra forma (menos elegante) de obtener esto es 'mktime (0,0,0, date ('m'), date ('j') - date ('N') + 1, date ('Y'))' – neokio

2

Prueba esto.

echo date('Y-m-d', strtotime('last monday', strtotime('next monday'))); 

Devolverá la fecha actual si hoy es lunes y regresará el último lunes de lo contrario. Al menos lo hace en mi PHP 5.2.4 en la configuración en_US.

3

$thisMonday = date('l, F d, Y', time() - ((date('w')-1) * 86400));

Editar: explicación

  • date('w') es una representación numérica del día de la semana (0 = Domingo, 6 = Sábado)
  • hay 86400 segundos en un día
  • tomamos la hora actual y restamos (un día * (día de la semana - 1))

Por lo tanto, si se encuentra actualmente Miércoles (día 3), el lunes es hace dos días:

time() - (86400 * (3 - 1)) = time() - 86400 * 2

Si es lunes (día 1), obtenemos:

time() - (86400 * (1 - 1)) = time() - 86400 * 0 = time()

Si es domingo (día 0), lunes es mañana.

time() - (86400 * (0 - 1)) = time() - -86400 = time() + 86400

70

Easisest manera:

$time = strtotime('monday this week'); 
+4

¡Hah! Cuando dicen [diga] (http://php.net/manual/en/function.strtotime.php) "Parse sobre cualquier descripción de fecha y hora textual en inglés en una marca de tiempo Unix", realmente lo dicen en serio, ¿no? +1 para la solución más legible –

+0

+1! Solución realmente fácil Me alegro de haber buscado esto, porque ya estaba construyendo una construcción elaborada para determinar la fecha del lunes. Typo sin embargo: 'strotime' debe ser' strtotime'. – Alec

+1

hoy es jueves 2012/05/17 (Y-m-d), cuando echo (fecha ('Y-m-d', strtotime ('lunes esta semana'))); va el 21/05/05, que es el lunes de la próxima semana – r4ccoon

1

Prueba este

$day_of_week = date("N") - 1; 
$monday_time = strtotime("-$day_of_week days"); 
Cuestiones relacionadas