Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>
- Que dia da semana corresponde a esta data?
- </title>
- <!-- ferramentas genéricas -->
- <script src="./js/am_util.js"></script>
- <!-- ferramentas específicas deste sys -->
- <script src="./js/4.js"></script>
- <script src="./js/ferramentas_datas.js"></script>
- </head>
- <body>
- <section id="idSectionEntrada">
- <form id="idFormDDS">
- <label for="idAno">Ano:</label>
- <input id="idAno"
- type="number"
- min="1"
- step="1"
- value="1969"
- ><!-- ano -->
- <br>
- <label for="idMes">Mês:</label>
- <input id="idMes"
- type="number"
- min="1"
- max="12"
- step="1"
- value="6"
- ><!-- mês -->
- <br>
- <label for="idDia">Dia: </label>
- <input id="idDia"
- type="number"
- min="1"
- max="31"
- step="1"
- value="21"
- ><!-- dia -->
- <br>
- <input type="reset" value="repor valores">
- <br>
- <input type="submit"
- value="confirmar data e calcular distância e dia da semana"
- ><!-- confirmar -->
- </form>
- </section>
- <hr>
- <section id="idSectionRelogio">Aqui aparecerá a distância até hoje, quando confirmar-se a data.</section>
- <hr>
- <section id="idSectionRespostas">
- <!-- Dia da Semana aparecerá aqui -->
- <span id="idSpanDDS">Aqui aparecerá feedback, sobre eventos e se a data é (não)válida.</span>
- </section>
- </body>
- </html>
- ****************
- // 4.js
- window.onload = boot;
- var idRelogio; // para saber o relógio criado, para poder pará-lo
- const DIAS_DA_SEMANA_PT = [
- "Domingo", "Segunda", "Terça",
- "Quarta", "Quinta", "Sexta",
- "Sábado"
- ]
- const ID_ANO = "idAno",
- ID_MES = "idMes",
- ID_DIA = "idDia",
- ID_FORM_DDS = "idFormDDS",
- ID_SPAN_DDS = "idSpanDDS",
- ID_SECTION_RELOGIO = "idSectionRelogio";
- // objetos de nível de módulo
- var oAno, oMes, oDia, oFormDDS,
- oSpanDDS, oSectionRelogio; //todos undefined
- function boot(){
- //assocs
- oAno = id(ID_ANO);
- oMes = id(ID_MES);
- oDia = id(ID_DIA);
- oFormDDS = id(ID_FORM_DDS);
- oSpanDDS = id(ID_SPAN_DDS);
- oSectionRelogio = id(ID_SECTION_RELOGIO);
- /*
- var a1 = ["coisa", "coisa2"];
- var a2 = new Array();
- a2.push("coisa");
- a2.push("coisa 2");
- */
- var aRelevantes = [
- oAno, oMes, oDia, // os inputs
- oFormDDS, // not in use
- oSpanDDS, // onde aparecerá a resposta
- oSectionRelogio
- ];
- var bOK = qualityControl( aRelevantes );
- if (!bOK) {
- window.alert("Objeto relevante indisponível. Fim.");
- return;
- }
- //comportamentos
- /*
- oAno.onchange = ehDarFeedbackSeDataValida;
- oMes.onchange = ehDarFeedbackSeDataValida;
- oDia.onchange = ehDarFeedbackSeDataValida;
- */
- oAno.onchange = oMes.onchange =
- oDia.onchange = ehDarFeedbackSeDataValida;
- oAno.onblur = oMes.onblur = oDia.onblur = ehQuandoPerdeFoco;
- oAno.onfocus = oMes.onfocus = oDia.onfocus = ehQuandoGanhaFoco;
- oFormDDS.onsubmit=dds; // alt a ter action no HTML para a form
- }// boot
- function
- calcDistanciaRelHojeEmMultiplasUnidades(){
- //aceder à data do utilizador
- var a,m,d;
- a = Number(oAno.value);
- m = Number(oMes.value);
- d = Number(oDia.value);
- var dataUser = new Date(a, m-1, d);
- var dataAgora = new Date();
- var distMS = Math.abs(dataAgora-dataUser); // ms
- var distS = distMS/1000;
- var distM = distS/60;
- var distH = distM/60;
- var distD = distH/24;
- //JSON = JavaScript Object Notation
- dictDistMultiplasUnidades = {
- 'ms':distMS,
- 'seg':distS,
- 'minutes':distM,
- 'hours':distH,
- 'days':distD
- };
- return dictDistMultiplasUnidades;
- }//calcDistanciaRelHojeEmMultiplasUnidades
- function ehQuandoPerdeFoco(pE){
- var evento = pE ? pE : window.event;
- var onde = evento.target ? evento.target : evento.srcElement;
- var idDeOndeEventoAconteceu = onde.id;
- var frase = idDeOndeEventoAconteceu+
- " perdeu o foco";
- oSpanDDS.innerHTML = frase + "<hr>" + oSpanDDS.innerHTML;
- return false;
- }//ehQuandoPerdeFoco
- function ehQuandoGanhaFoco(pE){
- var evento = pE ? pE : window.event;
- var onde = evento.target ? evento.target : evento.srcElement;
- var idDeOndeEventoAconteceu = onde.id;
- var frase = idDeOndeEventoAconteceu+
- " ganhou o foco";
- oSpanDDS.innerHTML = frase + "<br>" + oSpanDDS.innerHTML;
- return false;
- }//ehQuandoPerdeFoco
- function ehDarFeedbackSeDataValida(pE){
- var evento = pE ? pE : window.event;
- var onde =
- evento.target ? evento.target : evento.srcElement;
- //onde representa ONDE originou
- var bMudouAno = onde.id==ID_ANO;
- var bMudouMes = onde.id==ID_MES;
- var bMudouDia = onde.id==ID_DIA;
- var a,m,d;
- a = Number(oAno.value);
- m = Number(oMes.value);
- d = Number(oDia.value);
- var bDataValida = data_valida(
- a,m,d
- )
- var strValida = bDataValida ?
- "Data OK" : "Data inválida!"
- //cumulativa
- oSpanDDS.innerHTML=
- "<br><mark>"+strValida+"</mark>"
- /*
- +
- oSpanDDS.innerHTML;
- */
- return false;
- }//ehDarFeedbackSeDataValida
- function cronometro(){
- var ano, mes, dia;
- ano = Number(oAno.value);
- mes = Number(oMes.value);
- dia = Number(oDia.value);
- var dataUser = new Date(ano, mes-1, dia);
- var dataAgora = new Date();
- var ms = Math.abs(dataAgora-dataUser);
- var seg = ms/1000;
- var min = seg/60;
- var h = min/60;
- var d = h/24; //383838.4343 => 0.4343
- var dInt = Math.trunc(d);
- var dSobrantes = d-dInt;
- var h = dSobrantes*24;
- var hInt = Math.trunc(h);
- var hSobrantes = h-hInt;
- var minutes = hSobrantes*60;
- var minutesInt = Math.trunc(minutes);
- var minutesSobrantes = minutes-minutesInt;
- var segundos = minutesSobrantes*60
- var segundosInt = Math.trunc(segundos)
- var fraseChrono = dInt + " dia(s) "+
- hInt+ " hora(s) "+
- minutesInt + " minuto(s) "+
- segundosInt + " segundo(s)";
- return fraseChrono
- }//cronometro
- function dds(){
- var dds;
- var ano, mes, dia;
- ano = Number(oAno.value);
- mes = Number(oMes.value);
- dia = Number(oDia.value);
- var dataCorrespondenteAosInputs =
- new Date(
- ano,
- mes-1,
- dia
- );
- var bOK = data_valida(
- ano, mes, dia
- )
- if(bOK) {
- // getDay retorna um int em [0, 6]
- dds =
- dataCorrespondenteAosInputs.getDay()
- //oSpanDDS.innerHTML = dds;
- // alt1 - if-else
- if (dds == 0)
- frase_dds = "domingo";
- else if (dds == 1)
- frase_dds = "segunda";
- else if (dds == 2) frase_dds = "terça";
- else if (dds == 3) frase_dds = "quarta";
- else if (dds == 4) frase_dds = "quinta";
- else if (dds == 5) frase_dds = "sexta";
- else if (dds == 6) frase_dds = "sábado";
- // alt2 - switch
- switch (dds) {
- case 0:
- frase_dds = "domingo";
- break;
- case 1:
- frase_dds = "segunda";
- break;
- case 2:
- frase_dds = "terça";
- break;
- case 3:
- frase_dds = "quarta";
- break;
- case 4:
- frase_dds = "quinta";
- break;
- case 5:
- frase_dds = "sexta";
- break;
- case 6:
- frase_dds = "sábado";
- break;
- default:
- frase_dds = "dia impossível";
- break;
- }//switch
- //alt3 - Arrays
- frase_dds = DIAS_DA_SEMANA_PT[dds];
- oSpanDDS.innerHTML = frase_dds;
- }
- else{
- oSpanDDS.innerHTML = "Não é possível calcular o dia da semana,<br>porque a data NÃO é válida.";
- }
- // dia 2023-04-25
- distancias = calcDistanciaRelHojeEmMultiplasUnidades();
- strListDistancias = "<ul>";
- strListDistancias+="<li>Em dias inteiros: "+
- Math.trunc(distancias['days'])+"</li>"
- strListDistancias+="<li>Em horas: "+
- distancias['hours']+"</li>"
- strListDistancias+="<li>Em minutos: "+
- distancias['minutes']+"</li>"
- strListDistancias += "</ul>";
- //v1 - dist em múltiplas unidades (todas medindo o mesmo)
- //oSectionRelogio.innerHTML = strListDistancias;
- //v2 - chrono, mas estático
- //oSectionRelogio.innerHTML = cronometro()
- //v3 - chrono, atualizado a cada segundo
- idRelogio = window.setInterval(
- escrever_cronometro,
- 1000 // a cada 1 segundo = 1000 ms
- )
- return false;
- }//dds
- function escrever_cronometro(){
- oSectionRelogio.innerHTML = cronometro()
- }
Advertisement
Add Comment
Please, Sign In to add comment