DEV Community

Cover image for Obtendo os meses formatados com vanila JS
doug-source
doug-source

Posted on

Obtendo os meses formatados com vanila JS

Nota: apenas traduzi o texto abaixo e postei aqui.

Com vanilla JS, você pode usar getMonth() para recuperar o mês de qualquer Date object.

var date = new Date();
var month = date.getMonth();
Enter fullscreen mode Exit fullscreen mode

Porém, ele retorna um integer para o mês, começando em 0. Isso significa que janeiro é 0 em vez de 1 e dezembro é 11 em vez de 12.

Hoje, eu queria mostrar um truque para recuperar o nome de um mês formatado (como Janeiro ou Jan).

Criando uma helper function

Vamos criar uma pequena helper function, getMonths(), para nos ajudar.

Aceitaremos dois argumentos. O primeiro será o ID do mês, começando com 1 para janeiro. O segundo será um booleano opcional, short. Se for true, usaremos nomes curtos para os nossos meses, como Jan em vez de Janeiro.

var getMonths = function (month, short) {
    // Faça alguma coisa...
};
Enter fullscreen mode Exit fullscreen mode

Obtendo um array com os nomes do mês

Primeiro, vamos obter uma lista dos meses.

Criaremos uma variável format. Se short for definido e true, usaremos um formato de mês curto. Caso contrário, usaremos um longo.

var getMonths = function (month, short) {
    // Cria os nomes dos meses
    var format = short ? 'short' : 'long';
};
Enter fullscreen mode Exit fullscreen mode

A seguir, criaremos um array de 12 entries e usaremos o método Array.map() para criar um novo array com os nomes dos nossos meses.

Dentro do callback de Array.map(), acessaremos um Date() object, que foi instanciado inicialmente com um ano aleatório e um mês aleatório, e depois, a cada iteração, modificaremos seu mês com nosso ID do mês. Em seguida, chamaremos o método toLocalString() para retornar o nome do mês. Especificaremos que queremos o mês em nosso formato.

var getMonths = function (month, short) {
    // Cria os nomes dos meses
    var format = short ? 'short' : 'long';
    var date = new Date(2000, 1);
    var monthNames = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(function (mon) {
        date.setMonth(mon);
        return date.toLocaleString({}, { month: format });
    });
};
Enter fullscreen mode Exit fullscreen mode

Neste ponto, teremos agora um array monthNames, contendo nomes longos (["Janeiro", "Fevereiro", ...]) ou nomes curtos (["Jan", "Fev"]).

Como usamos o método toLocalString(), eles serão traduzidos em convenções locais de nomes de meses.

Obtendo um mês

Em seguida, precisamos obter nossos meses.

Vamos fornecer uma maneira de recuperar todos os meses como um array. Se nenhum month argument for fornecido, retornaremos o monthNames array inteiro.

var getMonths = function (month, short) {
    // Cria os nomes dos meses
    var format = short ? 'short' : 'long';
    var date = new Date(2000, 1);
    var monthNames = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(function (mon) {
        date.setMonth(mon);
        return date.toLocaleString({}, { month: format });
    });
    // Retorna o nome do mês (ou todos eles)
    return monthNames;
};
Enter fullscreen mode Exit fullscreen mode

Se um mês for passado, subtrairemos 1 dele (de modo que 1, janeiro, seja mapeado para 0 no array e assim por diante). Então, pegaremos esse item do getMonths array e o retornaremos.

var getMonths = function (month, short) {
    // Cria os nomes dos meses
    var format = short ? 'short' : 'long';
    var date = new Date(2000, 1);
    var monthNames = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(function (mon) {
        date.setMonth(mon);
        return date.toLocaleString({}, { month: format });
    });
    // Retorna o nome do mês (ou todos eles)
    if (month) {
        return monthNames[(month - 1)];
    }
    return monthNames;
};
Enter fullscreen mode Exit fullscreen mode

Compatibilidade de navegadores

A feature limitante para esta helper function é o método toLocaleString().

Isso funcionará em todos os navegadores modernos e no IE11 e superior.

Fonte

Newsletter de Go Make Things

Top comments (0)