All files / src/core ultimodiames.ts

100% Statements 32/32
100% Branches 11/11
100% Functions 1/1
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 651x 1x 1x 1x 1x             1x 31x   31x   30x 30x   30x   30x 166x 4x 4x 162x 26x 26x       30x     30x       18x 18x     3x 3x     3x 3x     3x 3x     3x 3x     30x     1x      
import { CodigoFormatoFecha, diasDelMes, ErroresComunes } from "../constants";
import { getFormatoFecha } from "./getformatofecha";
import { validarFecha } from "./validarfecha";
import { disgregarFecha } from "./disgregarfecha";
import { isBisiesto } from "./bisiesto";
 
/**
 * 
 * @param fecha 
 * Devuelve el final de mes para cada mes dado en alguno de los formatos validos. Considera aƱos bisiestos.
 */
export function getUltimoDiaMes( fecha: string ): string {
    try {
 
        validarFecha(fecha);
            
        const mesFebrero = '02';
        const ultimoDiaBisiesto = '29';
        let ultimoDia: string;
        const {mes, anio}  = disgregarFecha(fecha);
        
        for (let fecha of diasDelMes){
            if ( isBisiesto(anio) && mes === mesFebrero ){
                ultimoDia = ultimoDiaBisiesto;
                break;
            } else if (mes === fecha.mes){ 
                ultimoDia = fecha.dia;
                break;
            }
        }
 
        const formato = getFormatoFecha(fecha);
        
        let fechaUltimoDiaMes;
        switch (formato){
    
            case CodigoFormatoFecha.FMT_ESPANOL: 
                /* dd/mm/yyyy */
                fechaUltimoDiaMes = ultimoDia + '/' + mes + '/' + anio;
                break;
            case CodigoFormatoFecha.FMT_ITALIANO:
                /* dd-mm-yyyy*/
                fechaUltimoDiaMes = ultimoDia + '-' + mes + '-' + anio;
                break;
            case CodigoFormatoFecha.FMT_PLANO:
                /* ddmmyyyy*/
                fechaUltimoDiaMes = ultimoDia + mes + anio;
                break;
            case CodigoFormatoFecha.FMT_INVERSOPLANO:
                /* yyyymmdd */
                fechaUltimoDiaMes = anio + mes + ultimoDia;
                break;
            case CodigoFormatoFecha.FMT_INVERSO:
                /* yyyy/mm/dd */
                fechaUltimoDiaMes = anio + '/' + mes + '/' + ultimoDia;
                break;
        }
    
        return fechaUltimoDiaMes;
    
    } catch (error) {
        throw (error);
    }
   
}