Code Library

M · UDF

fnHolidaysInPeriodPT

Feriados nacionais e pontos facultativos do Brasil entre duas datas.

Categoria: Data e horaTipo: UDFVersão: v2.0Fonte: Laennder Alves, adaptado por Paulo André JesusAtualizado em: 25/09/2026
Documentação completa na Function Library →

Sintaxe

fnHolidaysInPeriodPT(StartDate as date, EndDate as date) as table

Argumentos

NomeTipoObrigatórioDescrição
StartDatedateSimInício do período.
EndDatedateSimFim do período, inclusive.

Retorno

table [DateReference = date, HolidayPT = text, HolidayType = text]

Código completo

let
    fnHolidaysInPeriodPT = (StartDate as date, EndDate as date) as table =>
        let
            vAnos = if EndDate < StartDate then {} else {Date.Year(StartDate) .. Date.Year(EndDate)},
            // Tabela vazia tipada garante as colunas mesmo sem nenhum ano
            vTodos = Table.Combine(
                {#table(type table [Data = date, Feriado = text, Tipo = text], {})}
                & List.Transform(vAnos, fnFeriados)
            ),
            vPeriodo = Table.SelectRows(vTodos, each [Data] >= StartDate and [Data] <= EndDate),
            vRenomeado = Table.RenameColumns(vPeriodo, {{"Data", "DateReference"}, {"Feriado", "HolidayPT"}, {"Tipo", "HolidayType"}})
        in
            Table.Sort(vRenomeado, {{"DateReference", Order.Ascending}}),

    Documentacao = [
        Documentation.Name = "fnHolidaysInPeriodPT",
        Documentation.Description = "Feriados nacionais e pontos facultativos do Brasil entre duas datas.",
        Documentation.LongDescription = "Chama fnFeriados para cada ano do período e filtra as datas. Colunas DateReference, HolidayPT e HolidayType (Feriado nacional, Ponto facultativo ou Data comemorativa).",
        Documentation.Category = "Data e hora",
        Documentation.Author = "Laennder Alves, adaptado por Paulo André Jesus",
        Documentation.Version = "2.0",
        Documentation.Examples = {
            [Description = "2024 a 2026", Code = "fnHolidaysInPeriodPT(#date(2024, 1, 1), #date(2026, 12, 31))", Result = "42 linhas (14 por ano)"],
            [Description = "Só feriados nacionais", Code = "Table.SelectRows(fnHolidaysInPeriodPT(#date(2026, 1, 1), #date(2026, 12, 31)), each [HolidayType] = ""Feriado nacional"")", Result = "10 linhas"]
        }
    ]
in
    Value.ReplaceType(fnHolidaysInPeriodPT, Value.ReplaceMetadata(Value.Type(fnHolidaysInPeriodPT), Documentacao))

Exemplos

fnHolidaysInPeriodPT(#date(2024, 1, 1), #date(2026, 12, 31))
// 42 linhas (14 por ano)

Table.SelectRows(fnHolidaysInPeriodPT(#date(2026, 1, 1), #date(2026, 12, 31)), each [HolidayType] = "Feriado nacional")
// 10 linhas

Dicas e observações

💡 Chama fnFeriados para cada ano: mesma lista e mesma classificação. ⚠️ Duas festas podem cair na mesma data (Páscoa em 21/04/2030). Agrupe por DateReference antes de mesclar com o calendário, ou o dia duplica.

Dependências

fnFeriados