entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Calendario simple en php

Hola

Alguien puede recomendarme un calendario simple en php?

Luego de mucho tiempo de buscar y buscar, paso a preguntarles a Uds.

Explico lo que necesito:
Necesito un calendario simple que me permita pasar variable de fecha con formato de 8 dígitos.
La mayoría de los calendarios pasan la fecha en formato: 10-1-2014 o 2014-1-10
No tengo problema en convertir la fecha, pero sí necesito que sea: 10-01-2014 o 2014-01-10
Es decir, que el mes y el día incluyan el cero en caso de ser menor a 10.

Tengo que poder clickear en la fecha para buscar novedades de ese día.

Muchas gracias

0voto

top21tk comentado

Amigos, no he podido arreglar este calendario.

Algún calendario debe haber!

Espero más sugerencias.
Muchas gracias.

0voto

Peter comentado

Moví tu respuesta a comentario porque no es una respuesta.

1 Respuesta

2votos

Leonardo-Tadei Puntos227020

Hola Top21tk,

debo tener algún calendario en PHP por algún lado... luego lo busco.

Sin embargo, el recibir la fecha con o sin 0 adelante no debería ser un problema a la hora de parsearla apra usarla.

Podrías hacer algo como:

$fecha = $_POST['fecha']; // viene 20-1-2014
$tmp = explode('-', $fecha; // vector con 3 elementos
$dia = str_pad($tmp[0], 2, "0", STR_PAD_LEFT); // el día con 0 delante si hace falta
$mes = str_pad($tmp[1], 2, "0", STR_PAD_LEFT); // el mes con 0 delante si hace falta
$ano = $tmp[2];

Luego, rearmás la fecha como te haga falta.

Supongo que te será más fácil parsear la fecha recibida que cambiar el calendario que ya estés usando...

Saludos!

0voto

top21tk comentado

Gracias Leo, como el calendario que tengo está maltrecho, espero conocer un calendario nuevo.
Seré paciente, de lo contrario implementaré tu sugerencia.

Muy amable...

0voto

Leonardo-Tadei comentado

Hola Top21tk,

el calendario que et mencionaba es este:

<?php
    $now = getdate(time());
    $time = mktime(0,0,0, $now['mon'], 1, $now['year']);
    $date = getdate($time);
    $dayTotal = cal_days_in_month(0, $date['mon'], $date['year']);
    //Print the calendar header with the month name.
    print '<table><tr><td colspan="7"><strong>' . $date['month'] . '</strong></td></tr>';
    for ($i = 0; $i < 6; $i++) {
        print '<tr>';
        for ($j = 1; $j <= 7; $j++) {
            $dayNum = $j + $i*7 - $date['wday'];
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td';
            if ($dayNum > 0 && $dayNum <= $dayTotal) {
                print ($dayNum == $now['mday']) ? ' style="background: #ccc;">' : '>';
                print $dayNum;
            }
            else {
                //Print a blank cell if no date falls on that day, but the row is unfinished.
                print '>';
            }
            print '</td>';
        }
        print '</tr>';
        if ($dayNum >= $dayTotal && $i != 6)
            break;
    }
    print '</table>';
?>

Pero no sé si vale la pena adaptarlo para que los días y meses tengan el cero adelante, sino que me parece mejor parsear lo que recibís y agregarlos los ceros si hace falta.

Para este, manejás cómo querés que se vea el día (texto, enlace, botón, etc) con la línea print $dayNum;

Este calendario se genera con un assitente que viene con BLuefish, el editor de código que más usamos por acá.

Saludos!

0voto

top21tk comentado

Gracias Leo.

FELIZ DÍA!

Estoy probando tu calendario.
Ahora, para complicarlo un poco necesito agregarle la posibilidad de cambiar de mes y de año.


Comentario:

Ahora me acordé por qué deje de usar mi calendario viejo. No podía avanzar en el mes o el año porque me daba el siguiente error:
Para cambiar de mes, lo hacía así:

$mes+1 //avanzar
$mes-1 //retroceder

El problema era llegar pasar del mes 12 al mes 1 del año siguiente :-(


Por ahora en "calendarioleo.php" je je. Estoy tratando de pasar mes y año por url.

    <?php

if($_GET["fecha"]==""){
$now=getdate(time());

}else{
$now=$_GET["fecha"];
}
    //$now = getdate(time());
    $time = mktime(0,0,0, $now['mon'], 1, $now['year']);
    $date = getdate($time);
    $dayTotal = cal_days_in_month(0, $date['mon'], $date['year']);
    //Print the calendar header with the month name.
    echo "<form><input type=text name=fecha><input type=submit></form>";
    print '<table><tr><td colspan="7"><strong>' . $date['month'] . '</strong></td></tr>';
    for ($i = 0; $i < 6; $i++) {
        print '<tr>';
        for ($j = 1; $j <= 7; $j++) {
            $dayNum = $j + $i*7 - $date['wday'];
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td';
            if ($dayNum > 0 && $dayNum <= $dayTotal) {
                print ($dayNum == $now['mday']) ? ' style="background: #ccc;">' : '>';
                print $dayNum;
            }
            else {
                //Print a blank cell if no date falls on that day, but the row is unfinished.
                print '>';
            }
            print '</td>';
        }
        print '</tr>';
        if ($dayNum >= $dayTotal && $i != 6)
            break;
    }
    print '</table>';

?>

2votos

Leonardo-Tadei comentado

Hola top21tk,

podrías hacerlo más simple usando la genial capacidad de PHP para manejar fechas, en que si ponés un día o mes mayor o menor de lo que existe, automáticamente mktime() te la convierte a la fecha válida corerspondiente. Por ejemplo, esto funciona, aunque nunca se trate de verificar que el mes sea mayor que 12 o menor de 1:

<!DOCTYPE html>
<html>
    <head>
        <title>Calendario</title>
    </head>
    <body>
<?php
    $now = getdate(time()); // Fecha actual
    $mes = $now['mon'];
    if(isset($_GET['m'])){
        // Si viene un mes como parámetro, lo usa
        $mes = intval($_GET['m']);
    }
    $anterior = $mes-1;
    $siguiente = $mes+1;
    $time = mktime(0,0,0, $mes, 1, $now['year']);
    $date = getdate($time);
    $dayTotal = cal_days_in_month(0, $date['mon'], $date['year']);
    //Print the calendar header with the month name.
    print '<table>
        <tr>
            <td colspan="7" style="text-align:center;">
                <a href="?m='.$anterior.'"><</a>
            <strong>' . $date['month'] . ' - '. $date['year'] .'</strong>
                <a href="?m='.$siguiente.'">></a>
            </td>
        </tr>';
    for ($i = 0; $i < 6; $i++) {
        print '<tr>';
        for ($j = 1; $j <= 7; $j++) {
            $dayNum = $j + $i*7 - $date['wday'];
            //Print a cell with the day number in it.  If it is today, highlight it.
            print '<td';
            if ($dayNum > 0 && $dayNum <= $dayTotal) {
                print ($dayNum == $now['mday']) ? ' style="background: #ccc;">' : '>';
                print $dayNum;
            }
            else {
                //Print a blank cell if no date falls on that day, but the row is unfinished.
                print '>';
            }
            print '</td>';
        }
        print '</tr>';
        if ($dayNum >= $dayTotal && $i != 6)
            break;
    }
    print '</table>';
?>
    </body>
</html>

Luego, si querés pasarte como parémetro la nueva fecha calculada, podrías usar los valores que da getdate() del mktime() calculado, aunque como se puede ver acá, no modifica el funcionamiento.

Te dejo a vos agregarle la parte del cambio de año, que es aplicar la misma lógica al otro valor.

Saludos!

PD: perdón por el estilo inline, pero quería centrar el mes con poco código.

0voto

Leonardo-Tadei comentado

Hola @top21tk !

Te sirvió el código del calendario? Lo pudiste usar?

0voto

top21tk comentado

Hola Leo.
Como alguna vez comenté, muy a mi pesar, no puedo dedicarme intesamente a esta actividad que me encanta.
No lo pude resolver, por falta de dos cosas: tiempo y conocimientos, por eso sigo utilizando un formulario abierto para realizar las consultas.
Una vez que logre hacer funcionar este calendario, junto a otros cambios que estoy preparando, "actualizaré" mi sistemita.

Abrazo..

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta