Tengo dos fechas almacenadas en mi base de datos como columnas dtp_s
y dtp_e
(inicio, fin). Estos se derivan de un formulario rellenado en el que se hace que el usuario seleccione una fecha de inicio y finalización.
Quiero mostrar registros de lunes a domingo de la semana actual, pero mi solución actual muestra fechas de 7 días antes de hoy.
SELECT id FROM _records WHERE dtp_s > unix_timestamp(now() - interval 1 week) AND userid = ? ORDER BY dtp_s DESC LIMIT 5
He intentado cambiar now()
para que sea el valor de strtotime( 'sunday' )
pero esto no muestra ningún registro cuando existe uno.
¿Alguna idea sobre cómo solo muestro datos basados en los que comienzan la misma semana (lunes a domingo)?
Para obtener el lunes de la semana actual, puede usar: -
select date(curdate() - interval weekday(curdate()) day)
Para agregar esto en su código: -
SELECT id FROM _records WHERE dtp_s > date(curdate() - interval weekday(curdate()) day) AND userid = ? ORDER BY dtp_s DESC LIMIT 5
Después de ver otras preguntas de SO, esto se puede lograr en SQL en lugar de mezclar valores PHP strtotime
que podrían estar en diferentes zonas horarias si no se configuran correctamente.
SELECT id FROM _records WHERE dtp_s > unix_timestamp(date(now() + interval 6 - weekday(now()) DAY) - interval 1 week) AND userid = ? ORDER BY dtp_s DESC LIMIT 5
Solo se muestran los registros de esta semana.