Foros del Web » Programando para Internet » PHP »

funcion obtener primer y ultimo dia de semana?

Estas en el tema de funcion obtener primer y ultimo dia de semana? en el foro de PHP en Foros del Web. hola amigos. estoy desarrollando una agenda, obtengo la fecha de hoy con Código PHP: date ( "Y-m-d H:i:s a" )  y en funcion de esto quiero obtener ...
  #1 (permalink)  
Antiguo 28/09/2006, 11:41
Avatar de Heros  
Fecha de Ingreso: abril-2005
Mensajes: 69
Antigüedad: 19 años
Puntos: 1
funcion obtener primer y ultimo dia de semana?

hola amigos.
estoy desarrollando una agenda, obtengo la fecha de hoy con
Código PHP:
date("Y-m-d H:i:s a"
y en funcion de esto quiero obtener las actividades que se haran durante esta semana para esto quiero saber si hay alguna funcion que me indique el primer dia de la semana y el ultimo dia de la semana a partir de obtener la fecha de hoy o cualquier fecha.
por ejemplo
hoy es 2006-09-28
primer dia de la semana fue 2006-09-25
ultimo dia de la semana sera 2006-10-01
existe alguna funcion para hacer esto? o en todo caso como se haria..
gracias de antemano por sus respuestas..
__________________
im knowing mi digitalself...
  #2 (permalink)  
Antiguo 28/09/2006, 11:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si estás trabajando con Fechas en una BBDD (Mysql?) deberías usar SQL para tal fin ... no PHP.

Si de todas formas quieres usar PHP:

Combina strtotime() para obtener el y date() para tomarlo de tu fecha concreta (hoy) o si es una a mano usa mktime().

Ejemplos:
http://www.php.net/manual/en/function.strtotime.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 28/09/2006, 12:27
Avatar de Heros  
Fecha de Ingreso: abril-2005
Mensajes: 69
Antigüedad: 19 años
Puntos: 1
hola Cluster.. antes de nada gracias por la respuesta..
sabes.. si estoy utilizando una base de datos en mysql..y ahi tengo almacenado todas las actividades que se realizan.. con sus fechas cada una, en todo caso como se haria esas consultas en mysql.. para obtener lo que antes te comente..
thx de antemano..
pd. mientras tanto voy a estar chekando mi tutorial de mysql
__________________
im knowing mi digitalself...
  #4 (permalink)  
Antiguo 28/09/2006, 13:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Heros Ver Mensaje
hola Cluster.. antes de nada gracias por la respuesta..
sabes.. si estoy utilizando una base de datos en mysql..y ahi tengo almacenado todas las actividades que se realizan.. con sus fechas cada una, en todo caso como se haria esas consultas en mysql.. para obtener lo que antes te comente..
thx de antemano..
pd. mientras tanto voy a estar chekando mi tutorial de mysql
(Deberías hacer tu consulta en el foro de "Base de datos -> Mysql").

El manual que debes ver es el oficial de Mysql y su tema de funciones para tratamiento de fechas (supongo que gestionarás tus fechas en campos tipo DATETIME?)

http://dev.mysql.com/doc/refman/5.0/...functions.html

Sería interesante que comentes que versión de Mysql usas .. por qué hay muchas funciones (sobre todo de fechas) que sólo funciona para PHP 4.0 o 4.1 o 5.0 en adelante ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 28/09/2006, 13:26
Avatar de Heros  
Fecha de Ingreso: abril-2005
Mensajes: 69
Antigüedad: 19 años
Puntos: 1
hola cluster.. estoy utilizando mysql 5
sabes despues de darle una chekeada a un libro de php y mysql.. encontre esta funcion que no exactamente me da el primer y el ultimo dia de la semana.. pero lo que hace es sumarle cierta cantidad de dias a la fecha actual y que me va servir para armar mi agenda
Código PHP:
SELECT FROM hygienist_appts WHERE
   appt_date 
>= CURDATE() 
     AND 
appt_date <= DATE_ADD(CURDATE(), INTERVAL 1 WEEK); 
con esto ya lograre mostrar las actividades que se planifiquen para esa semana... bueno esta es una solucion.. pero aun sigue en pie mi pregunta como entontrar el primer y ultimo dia de la semana para hacer una consulta y mostrar las actividades que se daran en esa semana.
un saludo.
__________________
im knowing mi digitalself...
  #6 (permalink)  
Antiguo 28/09/2006, 15:06
Avatar de seyacat  
Fecha de Ingreso: agosto-2006
Mensajes: 382
Antigüedad: 17 años, 8 meses
Puntos: 0
fijate aqui
http://www.php.net/date

tienes la opcion w, donde obtienes 0 domingo 6 sabado
opcion N
y la opcion D que te manda MON TUE THU.... etc

me parece que (N) funciona solo en PHP 5, no se bien si (w), pero con una simple funcion podras saber facilmente que dia es.

Saludos X.
  #7 (permalink)  
Antiguo 28/09/2006, 15:16
Avatar de seyacat  
Fecha de Ingreso: agosto-2006
Mensajes: 382
Antigüedad: 17 años, 8 meses
Puntos: 0
Mira que es facil!!!

<?php
$primer_dia = mktime();
$ultimo_dia = mktime();
while(date("w",$primer_dia)!=1){
$primer_dia -= 3600;
}
while(date("w",$ultimo_dia)!=0){
$ultimo_dia += 3600;
}
echo "Primer día ".date("D Y-m-d",$primer_dia)."<br>";
echo "Hoy ".date("D Y-m-d",mktime())."<br>";
echo "Ultimo día ".date("D Y-m-d",$ultimo_dia)."<br>";
?>

Última edición por seyacat; 28/09/2006 a las 15:30
  #8 (permalink)  
Antiguo 28/09/2006, 15:31
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas, en el manual te muestra cómo obtener el índice del día en la semana a partir de una fecha:

Por ej:
Código PHP:
SELECT WEEKDAY('2006-09-28'); 
Esto te devuelve 3 -> Jueves . (0:Lunes,1:Martes,etc)

Pero me parece que no te hace falta averiguar cuándo empieza y termina la semana para lo que querés hacer (Si lo que querés hacer es obtener los registros de una semana).

Podrías hacer algo así:

Código PHP:
SELECT *
FROM tabla_agenda 
WHERE WEEK
(campo_fecha,3) = WEEK(CURDATE(),3); 
Estarías buscando en la tabla agenda todos los registros pertenecientes a la semana actual. Es decir, obtenés la semana correspondiente a el campo que tiene la fecha y la comparás con la semana correspondiente a la fecha actual. (si en vez de usar curdate() usaras alguna fecha arbitraria, obtendrías los de esa semana en particular).

Bueno, probalo, la verdad es que nunca usé estas funciones pero parece que vienen al pelo para lo que necesitás.

Una idea para optimizar las consultas (si planeás usar índices): podrías agregar además de un campo fecha, un campo semana y convertirlo en índice. De esa forma harías

Código PHP:
SELECT *
FROM tabla_agenda 
WHERE campo_semana 
WEEK(CURDATE(),3); 
Lo cual es más rápido porque a) estás usando un índice y b) no tendrías que hacer un escaneo completo de la tabla para saber a qué semana pertenece cada registro (para eso está campo_semana).

Lo único, es que tanto al hacer un insert como al hacer un update tendrías que guardar la semana además de la fecha (lo cual es en principio un poco redundante pero me parece que compensa si la mayoría de las consultas van a ser SELECTS y sobre todo si tenés pensado que la tabla puede llegar a crecer...)


Suerte
Califa
  #9 (permalink)  
Antiguo 24/07/2007, 17:44
 
Fecha de Ingreso: julio-2007
Mensajes: 1
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: funcion obtener primer y ultimo dia de semana?

Aquí una función que te puede servir, la probe con algunos datos, espero te sirva:

<?php
function semana($dia_de_la_semana)
{
$fecha_dada = $dia_de_la_semana;
$fecha_dada = split("\-",$fecha_dada);
$numerodiasemana = date('w', mktime(0,0,0,$fecha_dada[1],$fecha_dada[2],$fecha_dada[0]));
$segundos_del_numerodiasemana = mktime(0,0,0,$fecha_dada[1],$fecha_dada[2],$fecha_dada[0]);

//Cálculo primer dia
if ($numerodiasemana == 0)
$segundos_a_restar = (24 * 3600 * 0);
if ($numerodiasemana == 1)
$segundos_a_restar = (24 * 3600 * 1);
if ($numerodiasemana == 2)
$segundos_a_restar = (24 * 3600 * 2);
if ($numerodiasemana == 3)
$segundos_a_restar = (24 * 3600 * 3);
if ($numerodiasemana == 4)
$segundos_a_restar = (24 * 3600 * 4);
if ($numerodiasemana == 5)
$segundos_a_restar = (24 * 3600 * 5);
if ($numerodiasemana == 6)
$segundos_a_restar = (24 * 3600 * 6);

//Cálculo último día
if ($numerodiasemana == 0)
$segundos_a_sumar = (24 * 3600 * 6);
if ($numerodiasemana == 1)
$segundos_a_sumar = (24 * 3600 * 5);
if ($numerodiasemana == 2)
$segundos_a_sumar = (24 * 3600 * 4);
if ($numerodiasemana == 3)
$segundos_a_sumar = (24 * 3600 * 3);
if ($numerodiasemana == 4)
$segundos_a_sumar = (24 * 3600 * 2);
if ($numerodiasemana == 5)
$segundos_a_sumar = (24 * 3600 * 1);
if ($numerodiasemana == 6)
$segundos_a_sumar = (24 * 3600 * 0);

$primer_dia = $segundos_del_numerodiasemana - $segundos_a_restar;
$ultimo_dia = $segundos_del_numerodiasemana + $segundos_a_sumar;
$primer_dia = date("Y-m-d",$primer_dia);
$ultimo_dia = date("Y-m-d",$ultimo_dia);
return array($primer_dia,$ultimo_dia);
}
$inicio_y_fin = semana('2007-07-31');
echo $inicio_y_fin[0];
echo "<br>";
echo $inicio_y_fin[1];
?>
  #10 (permalink)  
Antiguo 18/04/2011, 11:58
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: funcion obtener primer y ultimo dia de semana?

aka esto me funciono....
Código MySQL:
Ver original
  1. SELECT SUBDATE("2011-04-24",WEEKDAY(now())),ADDDATE("2011-04-24",6-WEEKDAY(now()));
  #11 (permalink)  
Antiguo 18/04/2011, 11:59
 
Fecha de Ingreso: diciembre-2009
Mensajes: 32
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: funcion obtener primer y ultimo dia de semana?

Siendo mas generico...:
Código MySQL:
Ver original
  1. SELECT SUBDATE(now(),WEEKDAY(now())) as primer_dia,ADDDATE(now(),6-WEEKDAY(now())) as ultimo_dia;
  #12 (permalink)  
Antiguo 22/07/2012, 08:16
 
Fecha de Ingreso: enero-2007
Mensajes: 6
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: funcion obtener primer y ultimo dia de semana?

xam1683 eres (como decimos en mi país) un chingón (Traducción: Buenazo)... tu respuesta de: Siendo mas generico... me acaba de super ayudar muchisimo, en verdad agradezco mucho la respuesta aunque yo no haya preguntado. Saludos!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:58.