Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <!-- quantos_dias.html -->
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Quantos dias já passaram desde uma data</title>
- <!-- genéricas -->
- <script src="util.js"></script>
- <!-- específicas para o projeto corrente -->
- <script src="quantos_dias.js"></script>
- </head>
- <body>
- <h1>Dias de intervalo entre uma data e agora</h1>
- <form>
- <fieldset>
- <legend>Uma data</legend>
- <label for="idNumberAno">Ano:</label>
- <input type="number"
- min="1"
- id="idNumberAno"
- size="4"
- value="2000">
- <label for="idNumberMes">Mes:</label>
- <input type="number"
- min="1"
- max="12"
- id="idNumberMes"
- size="4"
- value="1">
- <label for="idNumberDia">Dia:</label>
- <input type="number"
- min="1"
- max="31"
- size="4"
- id="idNumberDia"
- value="1">
- <input type="button"
- value="calcular"
- id="idBtnCalcular">
- </fieldset>
- </form>
- <hr>
- <section id="idSectionFeedback">Aqui aparecerá a
- distância, em dias, entre a data escrita/entrada e
- a data de hoje.</section>
- </body>
- </html>
- **
- window.onload = boot;
- const ID_NUMBER_ANO="idNumberAno",
- ID_NUMBER_MES="idNumberMes",
- ID_NUMBER_DIA="idNumberDia", //case-sensitive
- ID_BTN_CALCULAR="idBtnCalcular",
- ID_SECTION_FEEDBACK="idSectionFeedback";
- var oAno, oMes, oDia,
- oBtnCalcular, oSectionFeedback;
- function boot(){
- //associações
- oAno = $(ID_NUMBER_ANO);
- oMes = $(ID_NUMBER_MES);
- oDia = $(ID_NUMBER_DIA);
- oBtnCalcular = $(ID_BTN_CALCULAR);
- oSectionFeedback = $(ID_SECTION_FEEDBACK);
- var aImportantes = [
- oAno, oMes, oDia,
- oBtnCalcular,
- oSectionFeedback
- ];
- var bTudoOK = qualityControl(aImportantes);
- if (!bTudoOK){
- window.alert ("Há 1+ objeto(s) null - sistema abortado.");
- return; //undefined
- }
- //comportamentos
- noArranqueUtilizarADataCorrente();
- }//boot
- function noArranqueUtilizarADataCorrente(){
- //nope!
- /*
- oAno.value=2021;
- oMes.value=4;
- oDia.value=30;
- */
- var momentoDeAgora = new Date(); //default construction
- var iAnoDeAgora = momentoDeAgora.getFullYear(); //2021
- var iMesDeAgora = momentoDeAgora.getMonth()+1; //3+1
- var iDiaDeAgora = momentoDeAgora.getDate();
- /*
- outros métodos à nossa disposição
- getHours() - as horas, de 0 a 23
- getMinutes() - os minutos, de 0 a 59
- getSeconds() - os segundos, de 0 a 59
- getTime() - o nº de ms desde o "Unix Epoch" = 1970-01-01
- ????
- Quantos dias separam a data escrita pelo utilizador
- da data de AGORA
- dataUser.getTime()
- dataAgora.getTime()
- dataAgora.getTime()-dataUser.getTime() - a diferença entre as datas
- ...
- TODO:
- dataVálida
- matemática entre datas, para responder os #dias de diferença
- em pausa até ~1002
- */
- oAno.value=iAnoDeAgora;
- oMes.value=iMesDeAgora;
- oDia.value=iDiaDeAgora;
- }//noArranqueUtilizarADataCorrente
- ******
- window.onload = boot;
- const ID_NUMBER_ANO="idNumberAno",
- ID_NUMBER_MES="idNumberMes",
- ID_NUMBER_DIA="idNumberDia", //case-sensitive
- ID_BTN_CALCULAR="idBtnCalcular",
- ID_SECTION_FEEDBACK="idSectionFeedback";
- var oAno, oMes, oDia,
- oBtnCalcular, oSectionFeedback;
- function boot(){
- //associações
- oAno = $(ID_NUMBER_ANO);
- oMes = $(ID_NUMBER_MES);
- oDia = $(ID_NUMBER_DIA);
- oBtnCalcular = $(ID_BTN_CALCULAR);
- oSectionFeedback = $(ID_SECTION_FEEDBACK);
- var aImportantes = [
- oAno, oMes, oDia,
- oBtnCalcular,
- oSectionFeedback
- ];
- var bTudoOK = qualityControl(aImportantes);
- if (!bTudoOK){
- window.alert ("Há 1+ objeto(s) null - sistema abortado.");
- return; //undefined
- }
- //comportamentos
- noArranqueUtilizarADataCorrente();
- }//boot
- function noArranqueUtilizarADataCorrente(){
- //nope!
- /*
- oAno.value=2021;
- oMes.value=4;
- oDia.value=30;
- */
- var momentoDeAgora = new Date(); //default construction
- var iAnoDeAgora = momentoDeAgora.getFullYear(); //2021
- var iMesDeAgora = momentoDeAgora.getMonth()+1; //3+1
- var iDiaDeAgora = momentoDeAgora.getDate();
- /*
- outros métodos à nossa disposição
- getHours() - as horas, de 0 a 23
- getMinutes() - os minutos, de 0 a 59
- getSeconds() - os segundos, de 0 a 59
- getTime() - o nº de ms desde o "Unix Epoch" = 1970-01-01
- ????
- Quantos dias separam a data escrita pelo utilizador
- da data de AGORA
- dataUser.getTime()
- dataAgora.getTime()
- dataAgora.getTime()-dataUser.getTime() - a diferença entre as datas
- ...
- TODO:
- dataValida (ficou com o nome diaValido)
- matemática entre datas, para responder os #dias de diferença
- em pausa até ~1002
- */
- //inicializar os valores nos campos à data atual
- oAno.value=iAnoDeAgora;
- oMes.value=iMesDeAgora;
- oDia.value=iDiaDeAgora;
- //testara function diaValido
- oBtnCalcular.onclick = calcular;
- }//noArranqueUtilizarADataCorrente
- function calcular(){
- var ano=Number(oAno.value);
- var mes=Number(oMes.value);
- var dia=Number(oDia.value);
- var bDataValida = diaValido(
- ano,
- mes,
- dia
- );
- oSectionFeedback.innerHTML =
- bDataValida ? "Data válida!" : "Ooops: data inválida";
- if (bDataValida){
- var dataUtilizador =
- new Date(ano, mes-1, dia);
- var dataAgora = new Date();
- var msDataUtilizador = dataUtilizador.getTime();
- var msDataAgora = dataAgora.getTime();
- var msDiferenca =
- Math.abs(msDataAgora - msDataUtilizador);
- var diasDiferenca =
- //ms/segundos/minutos/horas/dias
- msDiferenca/1000/60/60/24;
- oSectionFeedback.innerHTML = Math.floor(diasDiferenca);
- }
- }
- function anoValido(pAno){
- //sol 1
- return pAno>=1;
- //sol 2
- if (pAno>=1){
- return true;
- }
- else
- return false;
- //sol 3
- return (pAno>=1) ? true : false;
- //sol 4
- var bAnoMaiorOuIdentico1 = pAno>=1;
- if (bAnoMaiorOuIdentico1) return true;
- else return false;
- }//anoValido
- function mesValido(pMes){
- //sol1
- return pMes>=1 && pMes<=12;
- //sol2
- return !(pMes<1 || pMes>12);
- //sol3
- return (bResultado=(pMes>=1 && pMes<=12)) ? true : false;
- //sol4
- switch(pMe /* exp ordinal */){
- case 1:
- case 2: case 3: case 4: case 5: case 6:
- case 7: case 8: case 9: case 10: case 11:
- case 12:
- return true;
- default:
- return false;
- }//switch
- }//mesValido
- function diaValido(
- pAno,
- pMes,
- pDia
- )
- {
- var bAnoValido = anoValido(pAno);
- var bMesValido = mesValido(pMes);
- if (!bAnoValido || !bMesValido){
- return false;
- }
- var numTotalDeDiasDoMes = numeroDeDiasNoMes(pAno, pMes);
- return pDia>=1 && pDia<=numTotalDeDiasDoMes;
- }//diaValido
- const MES_IMPOSSIVEL = -1;
- function numeroDeDiasNoMes (
- pAno,
- pMes
- ){
- /*
- var b31 = pMes==1 || pMes==3 || pMes==5 || pMes==7 || pMes==8
- || pMes==10 || pMes==12;
- var b30 = pMes==4 || pMes==6 || pMes==9 || pMes==11;
- var bFevereiro = pMes==2;
- if (b31) return 31;
- else if(b30) return 30;
- else if(bFevereiro) return bissexto(pAno) ? 29:28;
- else return MES_IMPOSSIVEL;
- */
- /*
- if (pMes==1 || pMes==3 || pMes==5 || pMes==7 || pMes==8
- || pMes==10 || pMes==12) return 31;
- else{
- if (pMes==4 || pMes==6 || pMes==9 || pMes==11)
- return 30;
- else{
- if (pMes==2) return bissexto(pMes) ? 29:28;
- else return MES_IMPOSSIVEL;
- }
- }
- */
- switch(pMes) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- return 31;
- case 4:
- case 6:
- case 9:
- case 11:
- return 30;
- case 2:
- return bissexto(pAno) ? 29 : 28;
- default:
- return MES_IMPOSSIVEL;
- }//switch
- }//numeroDeDiasNoMes
- /*
- Exercício: escreva, em JS, a função "bissexto" ("leapYear"), que
- que, recebido um ano qualquer, retorna true se esse ano
- for um ano bissexto; e false, caso contrário.
- O que é um ano bissexto?
- É um ano múltiplo 4, excepto se for um ano secular
- (múltiplo de 100, que marca uma viragem de século),
- excepto se for múltiplo de 400 (por definição, anos
- múltiplos de 400 são sempre bissextos).
- */
- function bissexto (pAno){
- var bM4 = pAno%4===0;
- var bM100 = pAno%100===0;
- var bM400 = pAno%400===0;
- var bC1 = bM4 && !bM100;
- var bC2 = bM400;
- return bC1 || bC2;
- return (pAno%4===0 && pAno%100!==0) || (pAno%400===0);
- }//bissexto
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement