Foros del Web » Programando para Internet » Javascript »

Fecha del sistema y selects

Estas en el tema de Fecha del sistema y selects en el foro de Javascript en Foros del Web. Buenas tardes. Antes de ir a comer, planteo un problema que tengo. Necesito que en dos selects me recoja, usando javascript, el día y el ...
  #1 (permalink)  
Antiguo 03/02/2005, 06:52
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Fecha del sistema y selects

Buenas tardes. Antes de ir a comer, planteo un problema que tengo. Necesito que en dos selects me recoja, usando javascript, el día y el mes del sistema. Realmente tengo hecha la función, buscada en internet, y sería algo así como...

hoy=new Date();
num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
mes=hoy.getMonth()+1;

if(mes==1) Mes="Enero";
if(mes==2) Mes="Febrero";
if(mes==3) Mes="Marzo";
if(mes==4) Mes="Abril";
if(mes==5) Mes="Mayo";
if(mes==6) Mes="Junio";
if(mes==7) Mes="Julio";
if(mes==8) Mes="Agosto";
if(mes==9) Mes="Setiembre";
if(mes==10) Mes="Octubre";
if(mes==11) Mes="Noviembre";
if(mes==12) Mes="Diciembre";

Pero luego no sé cómo hacer para que un select recoja el día que es y el otro select recoja el mes que es, siempre partiendo de la fecha del sistema. ¿Alguien sabe cómo se puede hacer eso? Muchas gracias.
  #2 (permalink)  
Antiguo 03/02/2005, 07:07
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Qué formato de fecha quieres enviar? 10-10-2005, 10/10/2005, 10 de octubre 2005???
  #3 (permalink)  
Antiguo 03/02/2005, 07:14
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 3 meses
Puntos: 772
Hola Ember y tunait

A la espera del formato que se quiera utilizar, vamos a simplificar un poco el código:

hoy=new Date();
num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo',...];
Mes=meses[mes];

Saludos,
  #4 (permalink)  
Antiguo 03/02/2005, 09:22
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 9 meses
Puntos: 0
Hola a todos,

Si entendi bien, lo que se pretende es crear un select con los meses y uno con los dias, y que aparezcan por defecto seleccionados el mes actual y el dia en curso en el select que corresponda. Si es eso, esto lo hace:

<html>
<!-- Creation date: 03/02/2005 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="author" content="Claudio Araya">
<script type="text/javascript">
hoy=new Date();
num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo','abril','mayo','junio',' julio','agosto','septiembre','octubre','noviembre' ,'diciembre'];
diasxMes=[31,28,31,30,31,30,31,31,30,31,30,31];
Mes=meses[mes];
function setmes(){
for (var i=0;i<12;i++){
opt = new Option();
opt.value = meses[i] ;
opt.text = meses[i];
if (mes==i) {opt.selected=true;}
elmes.options[i] = opt;
}
}
function setDias(){
for (var i=1;i<=diasxMes[mes];i++){
opt = new Option();
opt.value = i;
opt.text = i;
if (hoy.getDate()==i) {opt.selected=true;}
dias.options[i-1] = opt;
}
}
function setSelects(){
setmes();
setDias();
}
</script>
</head>
<body onload="setSelects();">
mes:<select name="elmes" id="elmes">
</select>
<br>
dias:<select name="dias" id="dias">
</select>
</body>
</html>

Claro que falta ver el tema de los años bisiestos pero lo dejo como tarea pendiente...

saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #5 (permalink)  
Antiguo 04/02/2005, 02:32
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Muchas gracias por la ayuda. El formato que tenía pensado era el que ha puesto claray, y veo que lo que ha hecho funciona perfectamente y coge bien el día y el mes del sistema. Gracias por la ayuda :))
  #6 (permalink)  
Antiguo 04/02/2005, 03:45
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Tengo un pequeño problema. Al poner esos selects dentro de un formulario, no funciona, no los coge. No sé, me resulta un poco extraño pero es un problema importante. ¿Alguien sabe a qué se debe?
  #7 (permalink)  
Antiguo 04/02/2005, 05:29
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Si yo pongo

<body>
<form onload="setSelects();">
dias:<select name="dias" id="dias">
</select>
<br><br>
mes:<select name="elmes" id="elmes">
</select>
</form>
</body>

no me funciona, porque no coge las fechas, pero al menos no da error al cargar la página. ¿Alguna solución? Muchas gracias nuevamente.
  #8 (permalink)  
Antiguo 04/02/2005, 08:23
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Mira, prueba a cambiar lo que te pongo en negritas, o copia el script entero y lo substituyes

Código:
<script type="text/javascript">
hoy=new Date();
num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo','abril','mayo','junio',' julio','agosto','septiembre','octubre','noviembre' ,'diciembre'];
diasxMes=[31,28,31,30,31,30,31,31,30,31,30,31];
Mes=meses[mes];
function setmes(){
for (var i=0;i<12;i++){
opt = new Option();
opt.value = meses[i] ;
opt.text = meses[i];
if (mes==i) {opt.selected=true;}
document.getElementById('elmes').options[i] = opt;
}
}
function setDias(){
for (var i=1;i<=diasxMes[mes];i++){
opt = new Option();
opt.value = i;
opt.text = i;
if (hoy.getDate()==i) {opt.selected=true;}
document.getElementById('dias').options[i-1] = opt;
}
}
function setSelects(){
setmes();
setDias();
}
</script>
  #9 (permalink)  
Antiguo 07/02/2005, 02:44
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Sigo teniendo el mismo problema... Dentro del <form> pongo el onload (y pruebo sin ponerlo) y no me funciona, pero en cuanto lo borro y pongo en onload dentro del <body> todo funciona. Necesito que funcione dentro del form porque luego ese formulario se envía a un jsp, pero quiero que las fechas se actualicen de forma automática, de ahí las funciones. Muchas gracias nuevamente.
  #10 (permalink)  
Antiguo 07/02/2005, 02:46
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Ah, vale, soy un poco melón...

<body onload="setSelects();">
<form>
dias:<select name="dias" id="dias">
</select>
<br><br>
mes:<select name="elmes" id="elmes">
</select>
</form>
</body>

Ahora sí funciona :)))
  #11 (permalink)  
Antiguo 07/02/2005, 03:21
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Una última pregunta... ¿cómo tengo que hacer para que en otros dos selects me aparezca el día siguiente de la fecha del sistema? Y que no me dé problemas con fechas finales de mes, si fuese posible. Muchas gracias una vez más.
  #12 (permalink)  
Antiguo 07/02/2005, 05:39
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Me funciona para el mes de febrero, siempre que no sea año bisiesto :))

function setRegresodias(){
for (var i=1;i<=diasxMes[mes];i++){
opt = new Option();
opt2 = new Option();
if(Mes=="febrero" && num==28){
opt.value = 1;
opt.text = 1;
opt2.value = "marzo";
opt2.text = "marzo";
}
else{
opt.value = i+1;
opt.text = i+1;
}
if (hoy.getDate()==i) {opt.selected=true;}
document.getElementById('dias2').options[i-1] = opt;
if (mes==i) {opt2.selected=true;}
document.getElementById('elmes2').options[i] = opt2;
}
}

¿Voy por el buen camino?
  #13 (permalink)  
Antiguo 07/02/2005, 13:51
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 9 meses
Puntos: 0
Hola otra vez,

Como lo que te falta es saber si es bisiesto (tarea pendiente), aqui te complemento la funcion que determina si el año es bisiesto y modifica el largo del mes de febrero:


<script type="text/javascript">
hoy=new Date();
num=((hoy.getDate()<10) ? "0" : "")+hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo','abril','mayo','junio',' julio','agosto','septiembre','octubre','noviembre' ,'diciembre'];
diasxMes=[31,28,31,30,31,30,31,31,30,31,30,31];

var ano = hoy.getYear();
var bisiesto = false;
if ((ano % 4) == 0) bisiesto=true;
if (bisiesto && ((ano % 100)==0)) bisiesto = false;
if (!bisiesto && ((ano % 400)==0)) bisiesto = true;
if (bisiesto) diasxMes[1] = 29;


Mes=meses[mes];
function setmes(){
for (var i=0;i<12;i++){
opt = new Option();
opt.value = meses[i] ;
opt.text = meses[i];
if (mes==i) {opt.selected=true;}
document.getElementById('elmes').options[i] = opt;
}
}
function setDias(){
for (var i=1;i<=diasxMes[mes];i++){
opt = new Option();
opt.value = i;
opt.text = i;
if (hoy.getDate()==i) {opt.selected=true;}
document.getElementById('dias').options[i-1] = opt;
}
}
function setSelects(){
setmes();
setDias();
}
</script>

ahora para saber el siguiente dia:

var diaDespues = num+1;
var mesDespues = mes;
if (diaDespues>diasxMes[mes]) {mesDespues = mes+1}
if (mesDespues > 11) mesDespues = 1; //era diciembre, pasa a enero


saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #14 (permalink)  
Antiguo 08/02/2005, 03:43
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Pregunta

Bueno, mi problema no viene tanto con el año bisiesto como con el hecho de controlar correctamente los dos selects que he añadido

<body onload="setSelects();">
<form name="frm">
dia ida:<select name="dias" id="dias">
</select>
<br><br>
mes ida:<select name="elmes" id="elmes">
</select>
<br><br>
dia regreso:<select name="dias2" id="dias2">
</select>
<br><br>
mes regreso:<select name="elmes2" id="elmes2">
</select>
</form>
</body>

El día de ida y el mes de ida los saco bien con las funciones que se habían puesto en este topic, pero ahora quiero que aparezca día de regreso y mes de regreso, pero que sean un día más de la fecha del sistema, aunque controlando que si es 31 de enero la fecha del sistema, aparezca 1 de febrero como fecha de regreso. Me he liado a la hora de poner for, if y muchas más cosas y no termino de hacerlo bien

¿Alguien sabe cómo hacer éso?
  #15 (permalink)  
Antiguo 08/02/2005, 11:15
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 9 meses
Puntos: 0
Hola, un pequeño cambio a la funciones... integremos todo y... presto:

<script type="text/javascript">
hoy=new Date();
num=hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo','abril','mayo','junio',' julio','agosto','septiembre','octubre','noviembre' ,'diciembre'];
diasxMes=[31,28,31,30,31,30,31,31,30,31,30,31];

var ano = hoy.getYear();
var bisiesto = false;
if ((ano % 4) == 0) bisiesto=true;
if (bisiesto && ((ano % 100)==0)) bisiesto = false;
if (!bisiesto && ((ano % 400)==0)) bisiesto = true;
if (bisiesto) diasxMes[1] = 29;

var diaDespues = num+1;
var mesDespues = mes;
if (diaDespues>diasxMes[mes]) {mesDespues = mes+1}
if (mesDespues > 11) mesDespues = 1; //era diciembre, pasa a enero


Mes=meses[mes];
function setmes(esteMes,esteId){
for (var i=0;i<12;i++){
opt = new Option();
opt.value = meses[i] ;
opt.text = meses[i];
if (esteMes==i) {opt.selected=true;}
document.getElementById(esteId).options[i] = opt;
}
}
function setDias(esteDia,esteId){
for (var i=1;i<=diasxMes[mes];i++){
opt = new Option();
opt.value = i;
opt.text = i;
if (esteDia==i) {opt.selected=true;}
document.getElementById(esteId).options[i-1] = opt;
}
}
function setSelects(){
setmes(mes,"elmes");
setmes(mesDespues,"elmes2");
setDias(num,"dias");
setDias(diaDespues,"dias2");

}
</script>

<body onload="setSelects();">
<form name="frm">
dia ida:<select name="dias" id="dias">
</select>
<br><br>
mes ida:<select name="elmes" id="elmes">
</select>
<br><br>
dia regreso:<select name="dias2" id="dias2">
</select>
<br><br>
mes regreso:<select name="elmes2" id="elmes2">
</select>
</form>
</body>

Ojo con los cambios en negrita.


saludos.
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #16 (permalink)  
Antiguo 09/02/2005, 02:51
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Pregunta

Hay un pequeño fallo que yo no he conseguido controlar de ninguna manera, incluso en tu código, claray. Verás, cuando pones en tu sistema que la fecha es 28 de febrero, te pone en el select como fecha de regreso el 1 de marzo, pero si abres el select de los días de marzo, tiene 28 y debería poner 31. Es decir, que eso no se "actualiza", suponiendo que sea la palabra exacta. Con eso estaría gran parte del problema resuelto, aunque a mí no se me ha ocurrido cómo controlarlo. Espero que puedas ayudarme con eso

Muchas gracias por todo.
  #17 (permalink)  
Antiguo 09/02/2005, 09:32
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 9 meses
Puntos: 0
Ok, hice unas modificaciones que permiten cambiar el numero de dias al cambiar el mes (ambos ida y venida).

<script type="text/javascript">
hoy=new Date();
num=hoy.getDate();
mes=hoy.getMonth();
meses=['enero','febrero','marzo','abril','mayo','junio',' julio','agosto','septiembre','octubre','noviembre' ,'diciembre'];
diasxMes=[31,28,31,30,31,30,31,31,30,31,30,31];

var ano = hoy.getYear();
var bisiesto = false;
if ((ano % 4) == 0) bisiesto=true;
if (bisiesto && ((ano % 100)==0)) bisiesto = false;
if (!bisiesto && ((ano % 400)==0)) bisiesto = true;
if (bisiesto) diasxMes[1] = 29;

var diaDespues = num+1;
var mesDespues = mes;
if (diaDespues>diasxMes[mes]) {mesDespues = mes+1;diaDespues=1;} //cambio
if (mesDespues > 11) mesDespues = 1; //era diciembre, pasa a enero


Mes=meses[mes];
function setmes(esteMes,esteId){
for (var i=0;i<12;i++){
opt = new Option();
opt.value = meses[i] ;
opt.text = meses[i];
if (esteMes==i) {opt.selected=true;}
document.getElementById(esteId).options[i] = opt;
}
}
function setDias(esteDia,esteMes,esteId){
while (document.getElementById(esteId).options[0]) {document.getElementById(esteId).options[0]=null;}
for (var i=1;i<=diasxMes[esteMes];i++){
opt = new Option();
opt.value = i;
opt.text = i;
if (esteDia==i) {opt.selected=true;}
document.getElementById(esteId).options[i-1] = opt;
}
}
function setSelects(){
setmes(mes,"elmes");
setmes(mesDespues,"elmes2");
setDias(num,mes,"dias");
setDias(diaDespues,mesDespues,"dias2");
}
</script>

<body onload="setSelects();">
<form name="frm">
dia ida:<select name="dias" id="dias">
</select>
<br><br>
mes ida:<select name="elmes" id="elmes" onchange="setDias(frm.dias.selectedIndex+1,this.se lectedIndex,'dias');">
</select>
<br><br>
dia regreso:<select name="dias2" id="dias2">
</select>
<br><br>
mes regreso:<select name="elmes2" id="elmes2" onchange="setDias(frm.dias2.selectedIndex+1,this.s electedIndex,'dias2');">
</select>
</form>
</body>


saludos
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
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 09:12.