Foros del Web » Programando para Internet » Javascript »

Crear de calendario dinámico

Estas en el tema de Crear de calendario dinámico en el foro de Javascript en Foros del Web. Hola... necesito hacer algo así Y que luego esto cambie dependiendo de si uno adelanta o devuelve un mes. EL problema que tengo, es que ...
  #1 (permalink)  
Antiguo 04/08/2016, 11:00
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Crear de calendario dinámico

Hola... necesito hacer algo así



Y que luego esto cambie dependiendo de si uno adelanta o devuelve un mes.


EL problema que tengo, es que no puedo hacer que los días sean del 1 al 31 (28 o 30 según corresponda) y que además parta del día que corresponda. EJ: Agosto partió un día Lunes. En caso de que parta un martes o domingo u otro día los cuadros deben quedar vacíos.


Esto es lo que llevo:
Código Javascript:
Ver original
  1. <script>
  2. var f=new Date();
  3. var numdias = cant_ds(f.getMonth()+1,f.getFullYear());
  4. var count = 1
  5.  
  6. var capa = document.getElementById("cabecera");
  7. var dias = ["Lunes", "Martes", "Míercoles", "Juéves", "Viernes", "Sábado", "Domingo"];
  8. var k=numdias;
  9.  
  10. //creo la cabecera
  11. for (i in dias){
  12.    $(capa).append('<div class="cal-cell1">'+dias[i]+'</div>');
  13. }
  14.  
  15.  
  16. var capa2 = document.getElementById("cuerpo");
  17.  
  18.  
  19. //aca creo "una semana" y por cada semana ingreso 7 días
  20. while(k>0){
  21.      $(capa2).append('<div id="Day'+k+'"class="cal-row-fluid cal-before-eventlist"></div>');
  22.      var capa3 = document.getElementById('Day'+k);
  23.      for (j=0; j<7;j++){
  24.           $(capa3).append('<div class="cal-cell1 cal-cell" data-cal-row="-day1">'+count+'</div>');
  25.      count++
  26.   }
  27.   k-=7
  28. }
  29.  
  30.  
  31. // Funcion para determinar numero de días del mes
  32. function cant_ds(mes,ano){
  33.     di=28
  34.     f = new Date(ano,mes-1,di);
  35.     while(f.getMonth()==mes-1){
  36.     di++;
  37.     f = new Date(ano,mes-1,di);
  38.     }
  39.     return di-1;
  40. }
  41. </script>

Código HTML:
Ver original
  1. <div id="cabece" class="cal-row-fluid cal-row-head">
  2.        
  3.         </div>
  4.        
  5.         <div id="cuerp" class="cal-month-box">
  6.        
  7.         </div>

Este es mi resultado



PD: este es el .css LINK
  #2 (permalink)  
Antiguo 04/08/2016, 13:18
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear de calendario dinámico

Mira yo no me manejo mucho con date de js lo que hago yo es con ajax (PHP) armo el mes, con php es facilísimo armar un calendario, ocupo esto simplemente para obtener y enviar eventos con hora en un día en específico.

Además el calendario con date de js está a merced de la fecha del usuario.

Eso no más. Es mi opinión.

Saludos
  #3 (permalink)  
Antiguo 04/08/2016, 13:22
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Crear de calendario dinámico

Y podrías facilitarme es e código? quizás me pueda servir
  #4 (permalink)  
Antiguo 05/08/2016, 04:52
 
Fecha de Ingreso: julio-2015
Mensajes: 85
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: Crear de calendario dinámico

Es necesario que lo realices tu?

Hay muchas opciones para realizar este tipo de cosas como pueda ser Un simple DatePiker de Bootstrap que te permite hacer cosas maravillosas con pocas lineas de html y si quieres hacer cosas dinamicas se puede manejar desde JQuery con pocas lineas de codigo y como ese hay muchos
  #5 (permalink)  
Antiguo 05/08/2016, 05:34
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Crear de calendario dinámico

Cita:
Iniciado por dardosmania Ver Mensaje
.... Un simple DatePiker de Bootstrap que te permite hacer cosas maravillosas con pocas lineas de html y si quieres hacer cosas dinamicas se puede manejar desde JQuery con pocas lineas de codigo y como ese hay muchos
cuanto consideras pocas líneas?? 2000 líneas??

uno que realicé hace años
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <style type="text/css">
  5. .c_calendario_general {
  6.     width: 400px;
  7.     height: auto;
  8.     border: 1px solid rgb(195, 192, 192);
  9.     z-index: 1;
  10. }
  11.  
  12.  
  13. .calendario{
  14.     width: 100%;
  15.     height: auto;
  16.     border-collapse: collapse;
  17. }
  18.  
  19.  
  20. .diasemana > th {
  21.     border-bottom: 1px solid rgb(195, 192, 192);
  22. }
  23.  
  24.  
  25. tr.controles > th {
  26.     cursor: default;
  27. }
  28.  
  29.  
  30. .Ccasilladia {
  31.     width: 38px;
  32.     height: 19px;
  33.     cursor: default;
  34.     text-align: center;
  35. }
  36. <script type="text/javascript">
  37. var calendario = {
  38.  
  39.     meses : ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
  40.     diasemana : ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'],
  41.     fechaHoy : null,
  42.     cTabla : null,
  43.     tBody : null,
  44.     formatoFecha : 'dd/mm/yyyy',
  45.  
  46.  
  47.     cabCalendario : function() {
  48.  
  49.         var fecha = new Date();
  50.         calendario.fechaHoy = fecha;
  51.  
  52.         var objcalendario = document.querySelectorAll('.c_calendario_general');
  53.  
  54.         calendario.cTabla = document.createElement('table');
  55.         calendario.cTabla.setAttribute('class', 'calendario');
  56.         var tHead = document.createElement('thead');
  57.         var cTHead = calendario.cTabla.appendChild(tHead);
  58.         var trH1 = document.createElement('tr');
  59.         trH1.setAttribute('class', 'controles');
  60.         var cTrHead = cTHead.appendChild(trH1);
  61.         var thH1 = document.createElement('th');
  62.         thH1.setAttribute('class', 'atrasy');
  63.         thH1.setAttribute('colspan', '1');
  64.         thH1.setAttribute('title', 'Retroceder un año');
  65.         thH1.textContent = '<<';
  66.         trH1.appendChild(thH1);
  67.         var thH2 = document.createElement('th');
  68.         thH2.setAttribute('class', 'atrasm');
  69.         thH2.setAttribute('colspan', '1');
  70.         thH2.setAttribute('title', 'Retroceder un mes');
  71.         thH2.textContent = '<';
  72.         trH1.appendChild(thH2);
  73.         var thH3 = document.createElement('th');
  74.         thH3.setAttribute('class', 'myyyy');
  75.         thH3.setAttribute('colspan', '3');
  76.         thH3.textContent = calendario.meses[calendario.fechaHoy.getMonth()] + ', ' + calendario.fechaHoy.getFullYear();
  77.         trH1.appendChild(thH3);
  78.         var thH4 = document.createElement('th');
  79.         thH4.setAttribute('class', 'adelantem');
  80.         thH4.setAttribute('colspan', '1');
  81.         thH4.setAttribute('title', 'Avanzar un mes');
  82.         thH4.textContent = '>';
  83.         trH1.appendChild(thH4);
  84.         var thH5 = document.createElement('th');
  85.         thH5.setAttribute('class', 'adelantey');
  86.         thH5.setAttribute('colspan', '1');
  87.         thH5.setAttribute('title', 'Avanzar un año');
  88.         thH5.textContent = '>>';
  89.         trH1.appendChild(thH5);
  90.         var trH2 = document.createElement('tr');
  91.         trH2.setAttribute('class', 'diasemana');
  92.         var cTrHead = cTHead.appendChild(trH2);
  93.  
  94.         for (var i = 0; i < 7; i++) {
  95.  
  96.             var thH = document.createElement('th');
  97.             thH.textContent = calendario.diasemana[i];
  98.             trH2.appendChild(thH);
  99.         }
  100.  
  101.  
  102.         objcalendario[0].appendChild(calendario.cTabla);
  103.  
  104.         calendario.cuerpoCalendario();
  105.  
  106.         document.querySelector('th.atrasy').addEventListener('click', function(){calendario.retrocede(false)}, false);
  107.         document.querySelector('th.atrasm').addEventListener('click', function(){calendario.retrocede(true)}, false);
  108.         document.querySelector('th.adelantey').addEventListener('click', function(){calendario.avanza(false)}, false);
  109.         document.querySelector('th.adelantem').addEventListener('click', function(){calendario.avanza(true)}, false);
  110.     },
  111.  
  112.  
  113.  
  114.  
  115.     cuerpoCalendario : function() {
  116.  
  117.         calendario.cBody = document.createElement('tbody');
  118.  
  119.     //variable fechaaux a modo de fecha auxiliar, la situo el dia 1 del mes y año actual
  120.         var fechaaux = new Date(calendario.fechaHoy.getFullYear(), calendario.fechaHoy.getMonth(), 1);
  121.     //saco el dia de la semana que es el 1 del mes actual
  122.         diaactual = fechaaux.getDay();
  123.     //y voy retrasando la fecha de dia en dia hasta que llego a un lunes, una vez llegue a este lunes, sera la primera fecha que se pinte en el calendario
  124.         while (diaactual != 1) {
  125.  
  126.             fechaaux.setDate(fechaaux.getDate() - 1);
  127.             diaactual = fechaaux.getDay();
  128.         }
  129.  
  130.     // creamos los dias en el calendario, pintamos el dia que contiene fechaaux y la pasamos al dia siguiente
  131.         for (var i = 0; i < 6; i++) {
  132.  
  133.             var trB = document.createElement('tr');
  134.             var cTrBody = calendario.cBody.appendChild(trB);
  135.  
  136.             for (var j = 0; j < 7; j++) {
  137.  
  138.                 if (calendario.fechaHoy.getMonth() == fechaaux.getMonth()) {
  139.  
  140.                     var tdB = document.createElement('td');
  141.                     tdB.setAttribute('class', 'Ccasilladia');
  142.  
  143.                     if (calendario.fechaHoy.getDate() == fechaaux.getDate()) {
  144.  
  145.                         configcolor = 'color: rgb(255, 255, 255); background-color: rgb(116, 116, 117);';   //CASILLA DE HOY
  146.                         tdB.setAttribute('style', configcolor);
  147.  
  148.                     } else if ((fechaaux.getDay() == 6) || (fechaaux.getDay() == 0)) { //si el dia actual es sabado o domingo
  149.                                
  150.                         configcolor = 'color: rgb(255, 0, 0);';
  151.                         tdB.setAttribute('style', configcolor);
  152.  
  153.                     } else {
  154.  
  155.                         configcolor = '';
  156.                     }
  157.  
  158.                     tdB.textContent = fechaaux.getDate();
  159.                     var cTdBody = cTrBody.appendChild(tdB);
  160.                     tdB.addEventListener('click', function() {calendario.mostrarFecha(this.textContent)});
  161.  
  162.                 } else {
  163.                    
  164.                     var tdB = document.createElement('td');
  165.                     var cTdBody = cTrBody.appendChild(tdB);
  166.  
  167.                 }
  168.  
  169.                 fechaaux.setDate(fechaaux.getDate() + 1);
  170.             }
  171.        
  172.         }
  173.  
  174.         calendario.cTabla.appendChild(calendario.cBody);
  175.  
  176.     },
  177.  
  178.  
  179.  
  180.     avanza: function(aniomes) {
  181.  
  182.         if (!aniomes) {
  183.  
  184.             calendario.fechaHoy.setFullYear(calendario.fechaHoy.getFullYear() + 1);
  185.            
  186.        
  187.         } else {
  188.  
  189.             calendario.fechaHoy.setMonth(calendario.fechaHoy.getMonth() + 1);
  190.  
  191.         }
  192.  
  193.         document.querySelector('.myyyy').innerHTML = calendario.meses[calendario.fechaHoy.getMonth()] + ', ' + calendario.fechaHoy.getFullYear();
  194.  
  195.         calendario.cTabla.removeChild(calendario.cBody);
  196.  
  197.         calendario.cuerpoCalendario();
  198.     },
  199.  
  200.  
  201.  
  202.     retrocede: function(aniomes) {
  203.  
  204.         if (!aniomes) {
  205.  
  206.             calendario.fechaHoy.setFullYear(calendario.fechaHoy.getFullYear() - 1);
  207.  
  208.         } else {
  209.  
  210.             calendario.fechaHoy.setMonth(calendario.fechaHoy.getMonth() - 1);
  211.  
  212.         }
  213.  
  214.         document.querySelector('.myyyy').innerHTML = calendario.meses[calendario.fechaHoy.getMonth()] + ', ' + calendario.fechaHoy.getFullYear();
  215.  
  216.         calendario.cTabla.removeChild(calendario.cBody);
  217.  
  218.         calendario.cuerpoCalendario();
  219.     },
  220.  
  221.  
  222.  
  223.     mostrarFecha : function(dia) {
  224.  
  225.         var fecha = [calendario.fechaHoy.getFullYear(), calendario.fechaHoy.getMonth() + 1, dia];
  226.  
  227.         document.getElementById('fentrada').textContent = calendario.formatFecha(fecha, calendario.formatoFecha);
  228.     },
  229.  
  230.  
  231.  
  232.    formatFecha : function(arr, darformato) {
  233. //https://msdn.microsoft.com/library/ff743760(v=vs.94).aspx
  234.         darformato = darformato.replace(/(d+)/g, function(v) {
  235.  
  236.             return ((arr[2].length < 2 && v.length > 1 ? '0' : '') + arr[2]);
  237.         });
  238.  
  239.  
  240.         darformato = darformato.replace(/(m+)/g, function(v) {
  241.  
  242.             return ((arr[1].toString().length < 2 && v.length > 1 ? '0' : '') + arr[1]);
  243.         });
  244.  
  245.         return darformato.replace(/(y+)/g, function(v) {
  246.  
  247.             return arr[0].toString().slice(-v.length);
  248.         });
  249.  
  250.     }
  251.  
  252.  
  253. }
  254.  
  255.  
  256. document.addEventListener('DOMContentLoaded', calendario.cabCalendario, false);
  257. </head>
  258.  
  259.     <div class="c_calendario_general"></div>
  260.     <div id="fentrada"></div>
  261.  
  262. </body>
  263. </html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 05/08/2016 a las 14:49
  #6 (permalink)  
Antiguo 05/08/2016, 07:18
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Crear de calendario dinámico

Cita:
Iniciado por dardosmania Ver Mensaje
Es necesario que lo realices tu?

Hay muchas opciones para realizar este tipo de cosas como pueda ser Un simple DatePiker de Bootstrap que te permite hacer cosas maravillosas con pocas lineas de html y si quieres hacer cosas dinamicas se puede manejar desde JQuery con pocas lineas de codigo y como ese hay muchos
El problema es que tu te tienes que adaptar a esos componentes, es difícil encontrar uno que tenga exactamente lo que necesitas. Ahora si puedo crear uno tengo el control total de código y se como se comporta.
  #7 (permalink)  
Antiguo 05/08/2016, 13:17
 
Fecha de Ingreso: julio-2015
Mensajes: 85
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: Crear de calendario dinámico

Cita:
Iniciado por IsaBelM Ver Mensaje
cuanto consideras pocas líneas?? 2000 líneas??
Con un datepicker no necesitas generar muchas lineas de codigo, piensa que bootstrap te lo da casi hecho, lo unico es que si quieres darle una funcionalidad a ese datepicker tendras que hacer algunas lineas de codigo pero nada del otro mundo, tu en tu caso lo generaste todo tu y en este caso no es asi.

ZedGe1505 Ahi te doy toda la razon por eso te dije que si era muy necesario que lo generases tu, si vas a hacer sosas que se salen de lo normal si que conviene hacerlo por tu cuenta
  #8 (permalink)  
Antiguo 05/08/2016, 14:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Crear de calendario dinámico

Estimado dardosmania:

Creo que IsaBelM se refiere a las miles de líneas de código que contiene la librería respectiva para que se pueda hacer uso de la funcionalidad del calendario. Eso, amigo, se llama pensar en el rendimiento.

Por otra parte, lo que ZedGe1505 claramente intenta hacer es un calendario personalizado, con opciones que quizá tengan o no otros calendarios, y como parece que se trata de un proyecto de investigación y no para salir de un apuro, la idea de utilizar el calendario de una librería, no tiene cabida.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 06/08/2016 a las 19:32 Razón: Corrección gramatical
  #9 (permalink)  
Antiguo 06/08/2016, 12:16
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años
Puntos: 11
Respuesta: Crear de calendario dinámico

Cita:
Iniciado por IsaBelM Ver Mensaje
cuanto consideras pocas líneas?? 2000 líneas??

uno que realicé hace años
Cumple las expectativas, pero no reconoce años bisiestos.
  #10 (permalink)  
Antiguo 06/08/2016, 14:15
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Crear de calendario dinámico

Cita:
Iniciado por jhonjaider1000 Ver Mensaje
Cumple las expectativas, pero no reconoce años bisiestos.
estás seguro?? compruebalo de nuevo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #11 (permalink)  
Antiguo 09/08/2016, 10:55
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Crear de calendario dinámico

Me he basado en la lógica de éste calendario

URL

Etiquetas: calendario, funcion, php
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




La zona horaria es GMT -6. Ahora son las 20:22.