2012-10-11 45 views
25

Si Tengo un $dateYYYY-mm-dd y desea obtener una específica $day (especificado por 0 (domingo) a 6 (Sábado)) de la semana que está en YYYY-mm-dd.¿Cómo encontrar el día de la semana a partir de una fecha usando PHP?

Por ejemplo, si tengo que 2012-10-11$date y 5 como $day, quiero conseguir 2012-10-12, si lo he entendido como 0$day, 2012-10-14

EDIT:
mayor parte de que las comprendió. Tengo un poco de fecha, $date y quiero conseguir un día especificado por 0-6 de la misma semana en $date es.

Así que no, no quiero que el día de $date ...

+0

¿Cuándo comienza su semana? ¿Lunes o Domingo? Sé que es lunes para la mayoría de las personas, pero me aseguro de que: p – keyser

+6

RTFM http://php.net/manual/en/function.date.php – VDP

+3

No creo que las personas que respondieron entendieron la pregunta correctamente. No desea obtener un número de día por fecha (que sería la fecha ('w')), pero quiere especificar la fecha Y el número del día y recibir la fecha correspondiente de la misma semana en que se especifica la fecha. – Vafliik

Respuesta

50

Creo que esto es lo que quieres.

$dayofweek = date('w', strtotime($date)); 
$result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date))); 
+1

Solución perfectamente fácil. Gracias – Zulakis

38

Puede utilizar la función date():

date('w'); // day of week 

o

date('l'); // dayname 

función Ejemplo para comenzar el día nr .:

function getWeekday($date) { 
    return date('w', strtotime($date)); 
} 

echo getWeekday('2012-10-11'); // returns 4 
-1

PHP Manual dijo:

w representación numérica del día de la semana

lo tanto, puede construir una cita con mktime, y utilizar en ella date("w", $yourTime);

+0

Has malentendido mi pregunta. Ver la edición de arriba. – Zulakis

0

I Me temo que tienes que hacerlo manualmente. Obtenga el día actual de la fecha de la fecha, calcule el desplazamiento y agregue el desplazamiento a la fecha.

$current = date("w", $date) 
$offset = $day - $current 
$new_date = new DateTime($date) 
    ->add(
     new DateInterval($offset."D") 
    )->format('Y-m-d') 
+1

Gracias por su enfoque, pero no, no tengo que hacerlo manualmente. Echa un vistazo a la respuesta de Rezigned. – Zulakis

6

Trate

$date = '2012-10-11'; 
$day = 1; 
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday','Friday', 'Saturday'); 
echo date('Y-m-d', strtotime($days[$day], strtotime($date))); 
+1

Buen enfoque, pero como puede ver en la respuesta de Rezigned, también puede usar '1 día', lo que hace que la matriz de $ días sea inútil. – Zulakis

2

Justo:

2012-10-11 como la fecha y $ 5 días como $

<?php 
$day=5; 
$w  = date("w", strtotime("2011-01-11")) + 1; // you must add 1 to for Sunday 

echo $w; 

$sunday = date("Y-m-d", strtotime("2011-01-11")-strtotime("+$w day")); 

$result = date("Y-m-d", strtotime($sunday)+strtotime("+$day day")); 

echo $result; 

?> 

El resultado $ = '2012-10- 12 'es lo que quieres.

Cuestiones relacionadas