Foros del Web » Programando para Internet » PHP »

desplear dias de la semana en concordancia

Estas en el tema de desplear dias de la semana en concordancia en el foro de PHP en Foros del Web. Amigos, Soy relativamente nuevo en php y quisiera aprender (aprender, no copiar y pegar una fuente prefrabricada) como hacer una agenda semanal, agradeceria aportes (aportes ...

  #1 (permalink)  
Antiguo 18/01/2012, 15:07
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Pregunta desplear dias de la semana en concordancia

Amigos,

Soy relativamente nuevo en php y quisiera aprender (aprender, no copiar y pegar una fuente prefrabricada) como hacer una agenda semanal, agradeceria aportes (aportes que digan como y porque, no has esto), de momento tengo esto:

Código PHP:
//hago el make time buscando el numero de dia de la semana
$d date('d');
$m date('m');
$y date('Y');
$day date('w'mktime(0,0,0,$month,$day,$year));
//hago un switch haciendo el match de cada dia 
switch ($day){
    case
'0':
        
$day 'Domingo';
    break;
    case
'1':
        
$day 'Lunes';
    break;
    case
'2':
        
$day 'Martes';
    break;
    case
'3':
        
$day 'Miercoles';
    break;
    case
'4':
        
$day 'Jueves';
    break;
    case
'5':
        
$day 'Viernes';
    break;
    case
'6':
        
$day 'Sabado';
    break;
}

//intento hacer el loop
$dias = array('Lunes''Martes''Miercoles''Jueves''Viernes''Sabado''Domingo');
for(
$i=0;$i<7;$i++){
    if(
$dias[$i] == $day){
        echo 
'<font color="red">'.$day.' </font>';
    } else {
        echo 
$dias[$i].' ';
    }

Lo que quiero conseguor es como mostrar la fecha actual al lado del dia, pero que siempre mantenga el orden ejemplo:

Lunes,16 Martes,17 Miercoles,18 Jueves,19 Viernes,20

Me entienden?

Gracias por los aportes y por la ayuda en aprender
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #2 (permalink)  
Antiguo 18/01/2012, 16:23
 
Fecha de Ingreso: julio-2010
Mensajes: 393
Antigüedad: 13 años, 8 meses
Puntos: 67
Respuesta: desplear dias de la semana en concordancia

Ya se que quieres aprender, me gusta tu actitud y de hecho no me gusta la gente que quiere todo hecho (que quede claro que no pienso que eres uno de ellos), pero hoy tenía un poco de tiempo..... puse nombres de variables bastantes descriptivos para que puedas estudiar más comodamente el código.

Código PHP:
Ver original
  1. <?
  2.     list($m, $y) = explode('/', date('m/Y'));
  3.     $dias = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');
  4.     $dia_del_mes = date('d');
  5.     $dia_de_la_semana = date('w'); 
  6.     $primer_dia_de_la_semana = $dia_del_mes - $dia_de_la_semana;
  7.     for($i = $primer_dia_de_la_semana ; $i < $primer_dia_de_la_semana + 7 ; $i++){
  8.         $fecha = mktime(0, 0, 0, $m, $i, $y);
  9.         echo $dias[date('w', $fecha)] . ' ' . date('d', $fecha) . '<br />';
  10.     }
  11. ?>

Estudialo, entiendelo.... ok?
Saludos!
__________________
Páginas web de alta calidad y hechas a la medida.
  #3 (permalink)  
Antiguo 18/01/2012, 16:56
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por el_quick Ver Mensaje
Ya se que quieres aprender, me gusta tu actitud y de hecho no me gusta la gente que quiere todo hecho (que quede claro que no pienso que eres uno de ellos), pero hoy tenía un poco de tiempo..... puse nombres de variables bastantes descriptivos para que puedas estudiar más comodamente el código.

Código PHP:
Ver original
  1. <?
  2.     list($m, $y) = explode('/', date('m/Y'));
  3.     $dias = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');
  4.     $dia_del_mes = date('d');
  5.     $dia_de_la_semana = date('w'); 
  6.     $primer_dia_de_la_semana = $dia_del_mes - $dia_de_la_semana;
  7.     for($i = $primer_dia_de_la_semana ; $i < $primer_dia_de_la_semana + 7 ; $i++){
  8.         $fecha = mktime(0, 0, 0, $m, $i, $y);
  9.         echo $dias[date('w', $fecha)] . ' ' . date('d', $fecha) . '<br />';
  10.     }
  11. ?>

Estudialo, entiendelo.... ok?
Saludos!

Me podrias explicar porque me da error?
esta linea no la entiendo:
Código PHP:
list($m$y) = explode('/'date('m/Y')); 
Listas dos variable para lueg decirle que le agregas al medio un slash?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #4 (permalink)  
Antiguo 18/01/2012, 17:15
 
Fecha de Ingreso: julio-2010
Mensajes: 393
Antigüedad: 13 años, 8 meses
Puntos: 67
Respuesta: desplear dias de la semana en concordancia

Ok, para que lo entiendas mejor, veamoslo por partes:

Código PHP:
Ver original
  1. <?
  2.     $fecha = date('m/Y');
  3.     echo $fecha . <br />;
  4.  
  5.     $exp_fecha = explode('/', $fecha);
  6.     echo '<pre>' ; print_r($exp_fecha) ; echo '</pre>' ;
  7.  
  8.     list($m, $y) = explode('/', $exp_fecha);
  9.     echo $m . <br />;
  10.     echo $y . <br />;
  11. ?>

Una vez lo tengas como pongo acá, ejecútalo para examinarlo mejor, luego por cada función utilizada ve a php.net lee todo lo que puedas sobre esas funciones. ok?

Error? en qué línea? que mensaje te da?

Saludos!
__________________
Páginas web de alta calidad y hechas a la medida.
  #5 (permalink)  
Antiguo 18/01/2012, 17:24
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por el_quick Ver Mensaje
Ok, para que lo entiendas mejor, veamoslo por partes:

Código PHP:
Ver original
  1. <?
  2.     $fecha = date('m/Y');
  3.     echo $fecha . <br />;
  4.  
  5.     $exp_fecha = explode('/', $fecha);
  6.     echo '<pre>' ; print_r($exp_fecha) ; echo '</pre>' ;
  7.  
  8.     list($m, $y) = explode('/', $exp_fecha);
  9.     echo $m . <br />;
  10.     echo $y . <br />;
  11. ?>

Una vez lo tengas como pongo acá, ejecútalo para examinarlo mejor, luego por cada función utilizada ve a php.net lee todo lo que puedas sobre esas funciones. ok?

Error? en qué línea? que mensaje te da?

Saludos!

Simplemente se me cae el servidor a lo mejor tengo configurado mal apache, no me muestra ni el error, que hacer entonces?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #6 (permalink)  
Antiguo 18/01/2012, 17:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: desplear dias de la semana en concordancia

Lo que sucede es que $exp_fecha ya es un array, por lo tanto explode() da error, pues necesita que el segundo argumento sea una cadena.
Código PHP:
<?php
    $fecha 
date('m/Y');
// MAL:    echo $fecha . <br />;
 
    
$exp_fecha explode('/'$fecha);
    echo 
'<pre>' print_r($exp_fecha) ; echo '</pre>' ;
 
// ESTO ESTA MAL
//    list($m, $y) = explode('/', $exp_fecha);

// ASI ESTA MEJOR
    
list($m$y) = $exp_fecha;

// MAL:    echo $m . <br />;
// MAL:    echo $y . <br />;

// MEJOR, NO?
    
echo $m '<br />';
    echo 
$y '<br />';
?>
Además los <br> deben ir entre comillas, pues es texto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 18/01/2012, 17:50
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Gracias Pateketrueke, eso era lo que estaba mal, yo si vi los <br /> si comillas, pero el error era desde list.

el_quick, ya esta no me da error, me sale esto:
Array
(
[0] => 01
[1] => 2012
)
01
2012
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #8 (permalink)  
Antiguo 18/01/2012, 20:20
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Para pasar el tiempo hice algo así, otra forma de mostrar los días en español. De lunes a domingo de la semana actual, lo dejo por si le sirve a alguien:

Código PHP:
Ver original
  1. <?php
  2. //configuración regional para las fechas en español
  3. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  4.  
  5. //Si es lunes calculamos a partir de la fecha actual
  6. if (date('w') == 1) {
  7.     $lastm = time();
  8. //Si es otro día buscamos la fecha del lunes pasado.
  9. } else {
  10.     $lastm = strtotime('last monday');
  11. }
  12.  
  13. //Bucle para mostrar los 7 días de la semana
  14. for ($i = 0; $i < 7; $i++) {
  15.     //Sumamos días a la fecha del lunes actual
  16.     $sd = strtotime("+$i day", $lastm);
  17.     //comprobamos si la fecha del bucle es la fecha actual
  18.     if (date('d', $sd) === date('d')) {
  19.         //colocamos una clase para colorear - strftime para mostrar los dias en español
  20.         echo '<span class="now">' . strftime("%A, %d", $sd) . '</span>' . PHP_EOL;
  21.     } else {
  22.         //Sino es el día actual imprimimos sin la clase
  23.         echo '<span>' . strftime("%A, %d", $sd) . '</span>' . PHP_EOL;
  24.     }
  25. }

Estilos CSS:

Código CSS:
Ver original
  1. span {
  2.     display: block;
  3. }
  4.  
  5. .now {
  6.     color: #f00;   
  7. }

Cita:
Resultado:

lunes, 16
martes, 17
miércoles, 18
jueves, 19
viernes, 20
sábado, 21
domingo, 22
Otro calendario mensual:

Código PHP:
Ver original
  1. <?php
  2. function calendar($m, $y) {
  3.     setlocale(LC_ALL, "es_ES@euro", "es_ES", "esp");
  4.     $data = '';
  5.     $ndays = date('t', strtotime("01-$m-$y"));
  6.     $data .= '<ul>' . PHP_EOL;
  7.     for ($i = 0; $i < $ndays; $i++) {
  8.         $ts = strtotime("01-$m-$y + $i day");
  9.         if (date('d-m') === date('d-m', $ts)) {
  10.             $data .= '<li class="now">' . date('d', $ts) . ' | ';
  11.             $data .= strftime("%A", $ts) . '</li>' . PHP_EOL;
  12.         } else {
  13.             $data .= '<li>' . date('d', $ts) . ' | ';
  14.             $data .= strftime("%A", $ts) . '</li>' . PHP_EOL;
  15.         }
  16.     }
  17.     $data .= '</ul>';
  18.     return $data;
  19. }
  20.  
  21. echo calendar(1, 2012);

Estilos css:

Código CSS:
Ver original
  1. .now {
  2.     color: #f00;   
  3. }

Cita:
Resultado:

01 | domingo
02 | lunes
03 | martes
04 | miércoles
05 | jueves
06 | viernes
07 | sábado
08 | domingo
09 | lunes
10 | martes
11 | miércoles
12 | jueves
13 | viernes
14 | sábado
15 | domingo
16 | lunes
17 | martes
18 | miércoles
19 | jueves
20 | viernes
21 | sábado
22 | domingo
23 | lunes
24 | martes
25 | miércoles
26 | jueves
27 | viernes
28 | sábado
29 | domingo
30 | lunes
31 | martes
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 18/01/2012, 21:00
 
Fecha de Ingreso: julio-2010
Mensajes: 393
Antigüedad: 13 años, 8 meses
Puntos: 67
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
Gracias Pateketrueke, eso era lo que estaba mal, yo si vi los <br /> si comillas, pero el error era desde list.

el_quick, ya esta no me da error, me sale esto:
Array
(
[0] => 01
[1] => 2012
)
01
2012
Ok, entonces solo queda que vayas a php.net y leas sobre explode, mktime, list y date, lo estudies varias veces hasta que todo quede claro.
Éxitos.

PD: Gracias por la corrección pateketrueke
__________________
Páginas web de alta calidad y hechas a la medida.
  #10 (permalink)  
Antiguo 19/01/2012, 08:44
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

wow !! andreszphp es lo que necesito, la primera opcion, pero hay cosas que no logro entender, por ejemplo:


PHP_EOL n idea que es, me lo podrias explicar?


//


el_quick:

ya mire en la documentacion de php (manual) y perfecto ya se para que sirve cada opcion. Gracias si lo deseas podriamos continuar, ya estoy viendo a donde quieres llegar y lo voy entendiendo eso me gusta. Gracias!!!

Saludos!!
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #11 (permalink)  
Antiguo 19/01/2012, 09:04
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

[QUOTE=andresdzphp;4096209]Para pasar el tiempo hice algo así, otra forma de mostrar los días en español. De lunes a domingo de la semana actual, lo dejo por si le sirve a alguien:

Código PHP:
Ver original
  1. <?php
  2. //configuración regional para las fechas en español
  3. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  4.  
  5. //Si es lunes calculamos a partir de la fecha actual
  6. if (date('w') == 1) {
  7.     $lastm = time();
  8. //Si es otro día buscamos la fecha del lunes pasado.
  9. } else {
  10.     $lastm = strtotime('last monday');
  11. }
  12.  
  13. //Bucle para mostrar los 7 días de la semana
  14. for ($i = 0; $i < 7; $i++) {
  15.     //Sumamos días a la fecha del lunes actual
  16.     $sd = strtotime("+$i day", $lastm);
  17.     //comprobamos si la fecha del bucle es la fecha actual
  18.     if (date('d', $sd) === date('d')) {
  19.         //colocamos una clase para colorear - strftime para mostrar los dias en español
  20.         echo '<span class="now">' . strftime("%A, %d", $sd) . '</span>' . PHP_EOL;
  21.     } else {
  22.         //Sino es el día actual imprimimos sin la clase
  23.         echo '<span>' . strftime("%A, %d", $sd) . '</span>' . PHP_EOL;
  24.     }
  25. }

Al parecer hay un problema con el if, creo que es por el time() pero no estoy seguro, alguien me podria ayudar diciendome porque no imprime lo que deberia de imprimir?

Gracias
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #12 (permalink)  
Antiguo 19/01/2012, 11:13
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
PHP_EOL n idea que es, me lo podrias explicar?
Se usa para hacer saltos de línea y poder leer el código fuente del html generado correctamente.

Cita:
Iniciado por function Ver Mensaje
Al parecer hay un problema con el if, creo que es por el time() pero no estoy seguro, alguien me podria ayudar diciendome porque no imprime lo que deberia de imprimir?
El código me funciona perfectamente, si tiene algún problema es por tu configuración. Si te está dando resultados que no son deberías mirar la zona horaria de tu php.ini en la directiva date.timezone o establecerla con la función date_default_timezone_set.

Aquí encontrarás una lista de las zonas horarias soportadas:

http://www.php.net/manual/en/timezones.php

Coloca el resultado que te está dando y que versión de PHP usas... A mi hoy ese código me da:

Cita:
lunes, 16
martes, 17
miércoles, 18
jueves, 19
viernes, 20
sábado, 21
domingo, 22
Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 19/01/2012 a las 11:18
  #13 (permalink)  
Antiguo 19/01/2012, 12:26
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Pues entonces no se que hacer, mi php.ini esta bien.

EL error me lo arroja en el if/else, porque? nose :(
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #14 (permalink)  
Antiguo 19/01/2012, 12:49
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
Pues entonces no se que hacer, mi php.ini esta bien.

EL error me lo arroja en el if/else, porque? nose :(
El código no tiene errores de sintaxis... Aveces el foro coloca unos caracteres ocultos para ordenar el código. Intenta de escribir el código o copiarlo directamente sin darle en ver original.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #15 (permalink)  
Antiguo 19/01/2012, 13:08
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por andresdzphp Ver Mensaje
El código no tiene errores de sintaxis... Aveces el foro coloca unos caracteres ocultos para ordenar el código. Intenta de escribir el código o copiarlo directamente sin darle en ver original.

Saludos.
Imposible me imprime:
Wednesday, 31 Wednesday, 31 Wednesday, 31 Wednesday, 31 Wednesday, 31 Wednesday, 31 Wednesday, 31

esto fue lo que hice:
Código PHP:
setlocale(LC_ALL,'es_ES@euro','es_ES','esp');
//Si es lunes calculamos a partir de la fecha actual
if(date('w') == 1) {
    
$ul time();
} else {
    
$ul strtotime('last monday');
}
//Bucle para mostrar los 7 dias de la semana
for($i=0;$i<7;$i++){
    
$sd strtotime('+$i day'$ul);
    if(
date('d'$sd) === date('d')) {
        echo 
'<font color="red">'.strftime('%A, %d'$sd).'</font> ';
    } else {
        echo 
'<font color="gray">'.strftime('%A, %d'$sd).'</font> ';        
    }

Que cambia o que debo cambiar?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #16 (permalink)  
Antiguo 19/01/2012, 13:21
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Copialo correctamente, las variables no se interpretan en comillas sencillas:

mal

Código PHP:
Ver original
  1. $sd = strtotime('+$i day', $ul);

bien

Código PHP:
Ver original
  1. $sd = strtotime("+$i day", $ul);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #17 (permalink)  
Antiguo 19/01/2012, 13:24
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por andresdzphp Ver Mensaje
Copialo correctamente, las variables no se interpretan en comillas sencillas:

Código PHP:
Ver original
  1. $sd = strtotime("+$i day", $ul);
Perfecto, se ve ahora si. entonces para aprender, las variables nuca pero nuca se deben de interpretar con comillas simples?

ejemplo:

$var1 = 'Hola';
$var2 = "Mundo";

Aqui daria igual cierto?

pero si en cambio concateno algo e incluyo una variable debiesen de it con " en lugar de ' ?

Porque en mi caso no me sale en castellano y a ti si?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar

Última edición por function; 19/01/2012 a las 13:29 Razón: Inclui lo del castellano
  #18 (permalink)  
Antiguo 19/01/2012, 13:48
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Por ejemplo:

Código PHP:
Ver original
  1. $unaVariable = 20;

Código PHP:
Ver original
  1. echo 'Mi numero es: $unaVariable <br />';

Da como resultado:

Mi numero es: $unaVariable

Código PHP:
Ver original
  1. echo "Mi numero es: $unaVariable <br />";

Da como resultado:

Mi numero es: 20

COMO: usar las comillas bien
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #19 (permalink)  
Antiguo 19/01/2012, 13:55
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por andresdzphp Ver Mensaje
Por ejemplo:

Código PHP:
Ver original
  1. $unaVariable = 20;

Código PHP:
Ver original
  1. echo 'Mi numero es: $unaVariable <br />';

Da como resultado:

Mi numero es: $unaVariable

Código PHP:
Ver original
  1. echo "Mi numero es: $unaVariable <br />";

Da como resultado:

Mi numero es: 20

COMO: usar las comillas bien


Genial entendi bien ahora, Gracias.

Lo del idioma, a lo consegui me toco redefinir los locales y ya está
http://misdocumentos.net/wiki/linux/locales
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #20 (permalink)  
Antiguo 19/01/2012, 14:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
Genial entendi bien ahora, Gracias.

Lo del idioma, a lo consegui me toco redefinir los locales y ya está
http://misdocumentos.net/wiki/linux/locales
Esa función no es que sea muy confiable y depende de la configuración. También puedes usar un array como lo estabas haciendo en un principio para reemplazar los nombres en inglés. Si usas mysql se puede lograr con funciones también.

Me alegro que aprendas algo, cualquier cosa me avisas.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #21 (permalink)  
Antiguo 19/01/2012, 15:06
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

ok Entonces para simplificar el tema e irme ordenando:

Tenemos sacados los dias con las fechas: para no depender de los locales, podriamos hacerlo en un array y asi traducirlo y no depender del setting del server.

Con locales
Código PHP:
setlocale(LC_ALL,"es_ES","esp");
//Si es lunes calculamos a partir de la fecha actual
if(date('w') == 1) {
    
$ul time();
} else {
    
$ul strtotime('last monday');
}
//Bucle para mostrar los 7 dias de la semana
for($i=0;$i<7;$i++){
    
$sd strtotime("+$i day"$ul);
    if(
date('d'$sd) === date('d')) {
        echo 
'<font color="red">'.strftime("%A, %d"$sd).'</font> ';
    } else {
        echo 
'<font color="gray">'.strftime("%A, %d"$sd).'</font> ';        
    }

sin locales y en array
Código PHP:
//Si es lunes calculamos a partir de la fecha actual
if(date('w') == 1) {
    
$ul time();
} else {
    
$ul strtotime('last monday');
}
//Array con los dias de la semana
$dias_semana = array('Lunes''Martes''Miercoles''Jueves''Viernes''Sabado''Domingo');
//Bucle para mostrar los 7 dias de la semana
for($i=0;$i<7;$i++){
    
$sd strtotime("+$i day"$ul);
    if(
date('d'$sd) === date('d')) {
        echo 
'<font color="red">'.$dias_semana[$i].''.date("d"$sd).'</font> ';
    } else {
        echo 
'<font color="gray">'.$dias_semana[$i].''.date("d"$sd).'</font> ';        
    }

Ahora como hacer para que vaya entre semanas, semana anterior y semana siguiente, podria ser asi:
Código PHP:
//calcular semana anterior
$semana_ant date('W')-1;
//calcular semana siguiente
$semana_sig date('W')+1
Por ahí voy bien encaminado?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #22 (permalink)  
Antiguo 19/01/2012, 15:35
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Tendrías que sumar y restar semanas, algo así más o menos (No es que sea lo más óptimo pero para que entiendas usando solamente PHP (yo usaría javascript):

Código PHP:
Ver original
  1. <?php
  2. $wk = isset($_GET['sem']) ? $_GET['sem'] : '';
  3.  
  4. if (date('w') == 1) {
  5.     if (!empty($wk)) {
  6.         $ul = strtotime("$wk week", time());
  7.     } else {
  8.         $ul = time();
  9.     }
  10. } else {
  11.     if (!empty($wk)) {
  12.         $ul = strtotime("last monday $wk week");
  13.     } else {
  14.         $ul = strtotime('last monday');
  15.     }
  16. }
  17.  
  18. $dias_semana = array('Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo');
  19.  
  20. for ($i = 0; $i < 7; $i++) {
  21.     $sd = strtotime("+$i day", $ul);
  22.     if (date('d-m', $sd) === date('d-m')) {
  23.         echo '<font color="red">' . $dias_semana[$i] . '' . date("d", $sd) . '</font> ';
  24.     } else {
  25.         echo '<font color="gray">' . $dias_semana[$i] . '' . date("d", $sd) . '</font> ';
  26.     }
  27. }  
  28. ?>
  29.  
  30. <br />
  31. <?php echo 'Semana número: ' . date('W', $ul); ?>
  32. <br />
  33. <a href="index.php?sem=<?php echo $wk-1; ?>">Anterior</a> - <a href="index.php?sem=<?php echo $wk+1; ?>">Siguiente</a>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #23 (permalink)  
Antiguo 19/01/2012, 15:41
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por andresdzphp Ver Mensaje
Tendrías que sumar y restar semanas, algo así más o menos (No es que sea lo más óptimo pero para que entiendas usando solamente PHP (yo usaría javascript):
Pero con javascript no dependeriamos siempre de la hora del equipo local?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #24 (permalink)  
Antiguo 19/01/2012, 15:48
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
Pero con javascript no dependeriamos siempre de la hora del equipo local?
Me refiero a usar ajax por ejemplo, probaste el código?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #25 (permalink)  
Antiguo 19/01/2012, 15:52
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

No aun no lo pruebo me toca escribirlo entero, para entenderlo y que no me pase lo de antes (el error sin causa)

Esta parte no la entiendo
Código PHP:
Ver original
  1. $ul = strtotime("$wk week", time());
  2.     } else {
  3.         $ul = time();
  4.     }
  5. } else {
  6.     if (!empty($wk)) {
  7.         $ul = strtotime("last monday $wk week");
  8.     } else {
  9.         $ul = strtotime('last monday');
  10.     }
  11. }
[/QUOTE]

Sobretodo esta linea:
Código PHP:
$ul strtotime("$wk week"time()); 
esto querra decir: le decimos que la semana week deba ser declarada por lo que diga la variable $wk y asignada con el tiempo en formato UNIX?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #26 (permalink)  
Antiguo 19/01/2012, 16:00
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Código PHP:
Ver original
  1. if (date('w') == 1) {
  2. //si es diferente de cero o vacío $_GET['sem']
  3.     if (!empty($wk)) {
  4. //entonces la fecha será la actual menos o mas una semana
  5.         $ul = strtotime("$wk week", time());
  6.     } else {
  7.         $ul = time();
  8.     }
  9. } else {
  10.     if (!empty($wk)) {
  11. //aquí la fecha del lunes pasado mas o menos una semana
  12.         $ul = strtotime("last monday $wk week");
  13.     } else {
  14.         $ul = strtotime('last monday');
  15.     }
  16. }

Edito: Me di cuenta que este año empieza con domingo y estamos tomando las semanas de lunes a domingo. Habría que cuadrar eso en una condición (en que día empieza el año).

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 19/01/2012 a las 16:09
  #27 (permalink)  
Antiguo 19/01/2012, 16:21
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Perfecto lo logre, me funciona. Me dejaste pensando en lo de ajax y claro seria mejor menos actualizacion de navegador. Excelente idea.

Al final pongo todo el codigo como aporte.

Ahora, como determino el dia en el que se encuentra cada columna, es decir:

Si quisrea sacar los datos de una BD, deberia mostrar todo según el dia es decir si estoy en jueves 19 el query lo podria hacer con DATETIME y tendria que hacer que encajen o estoy equivocado?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #28 (permalink)  
Antiguo 19/01/2012, 16:43
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

He descuebieto una falla, me marca en rojo todos los 19 es decir todos los dias posteriores y anteiores que coincidan con la fecha actual :(
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #29 (permalink)  
Antiguo 19/01/2012, 18:06
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: desplear dias de la semana en concordancia

Cita:
Iniciado por function Ver Mensaje
He descuebieto una falla, me marca en rojo todos los 19 es decir todos los dias posteriores y anteiores que coincidan con la fecha actual :(
Si hay que ser más precisos

cambiar:

Código PHP:
Ver original
  1. if (date('d', $sd) === date('d')) {

por

Código PHP:
Ver original
  1. if (date('d-m-y', $sd) === date('d-m-y')) {

y estás usando mal el array de los días:

en vez de:

Código PHP:
Ver original
  1. $dias_semana[$i]

debería ser:

Código PHP:
Ver original
  1. $dias_semana[date('w',$sd)]

y el array debe empezar en Domingo

Código PHP:
Ver original
  1. $dias_semana = array('Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado');
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #30 (permalink)  
Antiguo 20/01/2012, 10:42
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: desplear dias de la semana en concordancia

Pense que el array deberia de empezar en Lunes porque date('w') inicia en lunes o no?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar

Etiquetas: dias, semana
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 02:41.