Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions src/lib/tempo.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
77 changes: 77 additions & 0 deletions tests/tests.egua
Original file line number Diff line number Diff line change
Expand Up @@ -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("----------------------------");
Expand Down
Loading