From bd1938dcb65d79c9d31fc628294bc485e26ba633 Mon Sep 17 00:00:00 2001 From: samuel-c-santos Date: Wed, 26 Aug 2026 14:55:01 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20expande=20biblioteca=20tempo=20com=206?= =?UTF-8?q?=20novas=20fun=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - tempo.dia() - dia do mês (1-31) - tempo.mes() - mês (1-12) - tempo.ano() - ano completo - tempo.dia_da_semana() - nome do dia em pt-BR - tempo.formate_data(data, formato) - formatação customizada - tempo.diferenca(data1, data2) - diferença em dias entre datas - tempo.pausa(milissegundos) - sleep/delay para scripts Todas seguem padrão ES6 com validação RuntimeError. Testes adicionados em tests/tests.egua. --- src/lib/tempo.js | 100 +++++++++++++++++++++++++++++++++++++++++++++++ tests/tests.egua | 77 ++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) diff --git a/src/lib/tempo.js b/src/lib/tempo.js index aa75082..caf9579 100644 --- a/src/lib/tempo.js +++ b/src/lib/tempo.js @@ -57,3 +57,103 @@ function converterDataPtParaIso(date) { return `${year}-${month}-${day}`; } + +/** + * Retorna o dia do mês atual (1-31). + * @returns O dia do mês. + */ +export function dia() { + return new Date().getDate(); +} + +/** + * Retorna o mês atual (1-12). + * @returns O mês. + */ +export function mes() { + return new Date().getMonth() + 1; +} + +/** + * Retorna o ano atual. + * @returns O ano completo. + */ +export function ano() { + return new Date().getFullYear(); +} + +/** + * Retorna o nome do dia da semana em português. + * @returns O nome do dia da semana (domingo, segunda, etc.). + */ +export function dia_da_semana() { + const dias = ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"]; + return dias[new Date().getDay()]; +} + +/** + * Formata uma data conforme o formato especificado. + * @param {Date} data A data a ser formatada. + * @param {string} formato O formato desejado (ex: "DD/MM/AAAA", "AAAA-MM-DD"). + * @returns A data formatada como texto. + */ +export function formate_data(data, formato) { + if (!(data instanceof Date)) { + throw new RuntimeError( + this.token, + "O primeiro parâmetro deve ser uma data em tempo.formate_data(data, formato)." + ); + } + + if (typeof formato !== "string") { + throw new RuntimeError( + this.token, + "O segundo parâmetro deve ser um texto em tempo.formate_data(data, formato)." + ); + } + + const dia = String(data.getDate()).padStart(2, "0"); + const mes = String(data.getMonth() + 1).padStart(2, "0"); + const ano = data.getFullYear(); + + return formato + .replace("DD", dia) + .replace("MM", mes) + .replace("AAAA", ano); +} + +/** + * Calcula a diferença em dias entre duas datas. + * @param {Date} data1 A primeira data. + * @param {Date} data2 A segunda data. + * @returns A diferença em dias (valor absoluto). + */ +export function diferenca(data1, data2) { + if (!(data1 instanceof Date) || !(data2 instanceof Date)) { + throw new RuntimeError( + this.token, + "Ambos os parâmetros devem ser datas em tempo.diferenca(data1, data2)." + ); + } + + const diffMs = Math.abs(data2.getTime() - data1.getTime()); + return Math.floor(diffMs / (1000 * 60 * 60 * 24)); +} + +/** + * Pausa a execução por um tempo determinado. + * @param {number} milissegundos O tempo de pausa em milissegundos. + */ +export function pausa(milissegundos) { + if (typeof milissegundos !== "number" || milissegundos < 0) { + throw new RuntimeError( + this.token, + "O parâmetro deve ser um número positivo em tempo.pausa(milissegundos)." + ); + } + + const inicio = Date.now(); + while (Date.now() - inicio < milissegundos) { + // busy wait + } +} diff --git a/tests/tests.egua b/tests/tests.egua index 3754d0d..05f1952 100644 --- a/tests/tests.egua +++ b/tests/tests.egua @@ -1317,6 +1317,83 @@ testa_tempo_segundos_minutos_horas(); testa_texto_para_data_válida(); testa_texto_para_data_inválida(); +função testa_tempo_dia() { + var obtido = tp.dia(); + se (obtido == nulo ou obtido < 1 ou obtido > 31) { + escreva("TESTE: tempo.dia(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.dia(): passou!"); +} + +função testa_tempo_mes() { + var obtido = tp.mes(); + se (obtido == nulo ou obtido < 1 ou obtido > 12) { + escreva("TESTE: tempo.mes(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.mes(): passou!"); +} + +função testa_tempo_ano() { + var obtido = tp.ano(); + se (obtido == nulo ou obtido < 2024) { + escreva("TESTE: tempo.ano(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.ano(): passou!"); +} + +função testa_tempo_dia_da_semana() { + var obtido = tp.dia_da_semana(); + var dias_validos = ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"]; + var valido = falso; + para (var i = 0; i < tamanho(dias_validos); i = i + 1) { + se (obtido == dias_validos[i]) { + valido = verdadeiro; + } + } + se (valido != verdadeiro) { + escreva("TESTE: tempo.dia_da_semana(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.dia_da_semana(): passou!"); +} + +função testa_tempo_formate_data() { + var data = tp.texto_para_data("15/06/2024"); + var obtido = tp.formate_data(data, "DD/MM/AAAA"); + se (obtido != "15/06/2024") { + escreva("TESTE: tempo.formate_data(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.formate_data(): passou!"); +} + +função testa_tempo_diferenca() { + var data1 = tp.texto_para_data("01/01/2024"); + var data2 = tp.texto_para_data("11/01/2024"); + var obtido = tp.diferenca(data1, data2); + se (obtido != 10) { + escreva("TESTE: tempo.diferenca(): falhou!"); + erros_tp = erros_tp + 1; + retorna; + } + escreva("TESTE: tempo.diferenca(): passou!"); +} + +testa_tempo_dia(); +testa_tempo_mes(); +testa_tempo_ano(); +testa_tempo_dia_da_semana(); +testa_tempo_formate_data(); +testa_tempo_diferenca(); + escreva("----------------------------"); escreva(" terminado com " + texto(erros_tp) + " erro(s)!"); escreva("----------------------------");