2011-03-09 11 views
8

Tengo un problema para obtener la fecha del lunes en la semana actual.PHP strtotime() diferentes resultados del lunes de esta semana

echo date('Y-m-d',strtotime('monday this week')); 

Cuando estoy ejecutando el código anterior en mi máquina local (PHP 5.3) emite correctamente '2011-03-07', pero el mismo código en mi servidor (PHP 5.2) salidas '2011-03 -14 '(eso es el lunes de la próxima semana).

He intentado ejecutar la fecha ('W') en ambas máquinas y obtengo el mismo resultado (10).

Editar: ¿Alguna idea de cómo funciona esto correctamente?

Gracias de antemano.

+1

única suposición es tal que defina inicio de la semana de manera diferente ... – Mikhail

+3

Configure la fecha de su servidor para que sea correcta –

+0

Y la pregunta es. . . –

Respuesta

4

No he visto exactamente este problema, pero he visto unos muy similares. strtotime parece cambiar el comportamiento entre las diferentes versiones de PHP, y salvo las operaciones simples (por ejemplo, '+1 semana'), es difícil garantizar que la funcionalidad seguirá siendo la misma.

Si no puede actualizar a 5.3, que como se señaló correctamente parece ser una mejora, todo lo que puedo recomendar, es jugar con algunas permutaciones. A menudo es posible obtener la respuesta correcta de versiones anteriores de strtotime reformulando la pregunta. Los ejemplos pueden incluir ...

  • próximo lunes -1 semana
  • lunes pasado 1 semana
  • este Lunes
3

Sí, la interpretación de las cadenas en strtotime mejoró significativamente en 5.3.

0

Ejecute el comando "date" desde el indicador cli en el servidor y su escritorio local. Esto verificará si el sistema operativo está viendo la misma fecha en ambos sistemas.

0

Usted tiene dos opciones: o evitar el uso de esta función de comprobación de si el la fecha está en el futuro, si es así, la defrauda en 7 días. Bienvenido al mundo salvaje de PHP.

8

Uso date('Y-m-d',strtotime(date('o-\\WW')));

+1

Ahorrador de vida. Especialmente si no puedes actualizar a php 5.3. –

0

vistazo a esto:

"Tenga en cuenta que no se puede confiar en esta función solo para validar una fecha, ya que aceptará fechas dementes como el 31 de de febrero de

.

Además, la funcionalidad '... la semana' por sí sola puede no hacer lo que espera. Si se usa un domingo, 'la próxima semana' no devolverá una marca de tiempo del lunes siguiente, sino del lunes siguiente. la marca de tiempo para el lunes de la semana actual se devuelve cuando se usa 'anterior/última semana' y 'esta semana' devuelve un sello del lunes de la próxima semana (es decir al día siguiente). Esta no es la 'semana comienza el domingo' efecto, ya que eso significaría que todas las marcas de tiempo de regresar tendría que ser un domingo, y ninguno de ellos son."

Ff Hoy es domingo, estará mal.

0

Aquí hay otra solución que funciona (en realidad, el único que trabajó para mí):

$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24)); 
Cuestiones relacionadas