Como adicionar e subtrair hora de uma data em JavaScript

Neste post, discutiremos como você pode manipular a data com um JavaScript Date objeto. Especificamente, veremos como você pode adicionar tempo a um Date objeto e subtrair o tempo de um Date objeto em JavaScript.

Freqüentemente, você precisará trabalhar com datas e horas em JavaScript. Felizmente, o JavaScript fornece um recurso integrado Date objeto que fornece muitos métodos utilitários para gerenciamento de data e hora. Embora esses métodos sejam realmente úteis para recuperar diferentes elementos de data e hora, um Date object não fornece nenhum método que você possa usar para manipular a data em si. Na maioria dos casos, você pode simplesmente usar esses métodos para formatar a data e a hora da saída.

Na verdade, se você quiser realizar operações em um Date objeto como adicionar ou subtrair tempo de uma data, não há uma maneira fácil no JavaScript vanilla. Freqüentemente, você acabará implementando uma solução personalizada que funciona para você. Como alternativa, você pode usar uma biblioteca de data e hora como moment.js. Hoje, discutiremos as duas maneiras de realizar manipulações de datas em JavaScript.

Como adicionar hora a uma data JavaScript com Vanilla JavaScript

Nesta seção, discutiremos como você pode adicionar tempo a um JavaScript Date objeto em JavaScript Vanilla.

Em JavaScript, o getTime() A função retorna o número de milissegundos desde a época do Unix. Essa é apenas uma convenção de horário de computador que conta o número de segundos (milissegundos em JavaScript) desde a meia-noite UTC de 1º de janeiro de 1970.

Vamos tentar entender como você pode usar o getTime() função para adicionar tempo a um Date objeto em JavaScript. No exemplo a seguir, adicionaremos uma hora ao tempo existente Date objeto.

1
var currentDateObj = new Date();
2
var numberOfMlSeconds = currentDateObj.getTime();
3
var addMlSeconds = 60 * 60 * 1000;
4
var newDateObj = new Date(numberOfMlSeconds + addMlSeconds);

Primeiramente, inicializamos o currentDateObj variável com a data atual, e é um Date objeto. A seguir, usamos o getTime() função para obter o número de milissegundos do currentDateObj objeto.

A seguir, calculamos o número de milissegundos em uma hora. Basicamente, multiplicamos o número de minutos em uma hora (60) pelo número de segundos em um minuto (60) e o número de milissegundos em um segundo (1000) para obter o número de milissegundos em uma hora.

Como você já deve saber, você pode inicializar um Date objeto fornecendo o número de milissegundos como o primeiro argumento, e isso inicializaria um objeto de data em referência a ele. Assim, adicionamos numberOfMlSeconds e addMlSeconds para obter o número total de milissegundos e o usamos para inicializar um novo objeto de data. E o resultado final é o newDateObj objeto, que deve mostrar uma data adiantada em uma hora em relação ao currentDateObj objeto.

Na verdade, você pode ir em frente e criar uma função reutilizável, conforme mostrado no trecho a seguir.

1
function addHoursToDate(objDate, intHours) {
2
    var numberOfMlSeconds = objDate;
3
    var addMlSeconds = (intHours * 60) * 60 * 1000;
4
    var newDateObj = new Date(numberOfMlSeconds + addMlSeconds);
5

6
    return newDateObj;
7
}

Veja como você pode chamá-lo para obter, por exemplo, uma data exatamente um dia no futuro.

1
addHoursToDate(Date.now(), 24)

Date.now() já retorna milissegundos, então não há necessidade de usar getTime() Neste cenário.

Tente alterar o valor das horas no painel JavaScript abaixo. Observe como a data exibida na guia HTML muda.

Você também pode usar a função acima para adicionar um número de dias a um objeto Date existente; você só precisa converter dias em horas antes de chamar a função acima.

Como subtrair o tempo de uma data JavaScript com Vanilla JavaScript

Nesta seção, veremos como você pode subtrair o tempo de um JavaScript Date objeto.

A lógica de subtrair o tempo de um Date object é muito semelhante à operação add, exceto que precisamos subtrair milissegundos em vez de adicioná-los.

Vamos examinar o exemplo a seguir para ver como funciona.

1
function subtractTimeFromDate(objDate, intHours) {
2
    var numberOfMlSeconds = objDate;
3
    var addMlSeconds = (intHours * 60) * 60 * 1000;
4
    var newDateObj = new Date(numberOfMlSeconds - addMlSeconds);
5

6
    return newDateObj;
7
}

Como você pode ver, é quase idêntico à operação de adição. A única diferença é que estamos subtraindo addMlSeconds de numberOfMlSeconds em vez de adicionar.

Como usar a biblioteca Moment.js para realizar manipulações de datas

Na seção anterior, discutimos como você pode usar JavaScript vanilla para realizar manipulações de data e hora. Se você não precisar de nenhuma operação complexa com JavaScript Date objeto, você pode conviver com a implementação do Vanilla JavaScript. Por outro lado, se o seu projeto exige que você execute diferentes tipos de manipulação de data e hora, é melhor usar uma biblioteca de terceiros que pode facilitar as coisas para você.

Data e hora podem ser surpreendentemente complicadas. Por exemplo, pense em adicionar vários anos a uma data usando o método acima. Seria fácil se os anos tivessem sempre a mesma duração. No entanto, no mundo real, temos anos bissextos. Da mesma forma, se quiser adicionar vários meses a uma data, você terá que saber quantos dias cada mês tem.

Nesta seção, veremos como você pode usar a biblioteca Moment.js, que fornece uma infinidade de métodos utilitários para manipular um JavaScript. Date objeto. Vá em frente e baixe a biblioteca Moment.js e você estará pronto para usá-la!

Com a biblioteca Moment.js você só precisa chamar o moment() função para obter o objeto de data atual. Depois de obtê-lo, você pode usar diferentes métodos de análise para formatação e métodos de manipulação para manipular o objeto de data atual.

1
// display the current datetime

2
console.log(moment().format());
3

4
// add '1' hour to the current datetime

5
console.log(moment().add(1, 'h').format());
6

7
// add '30' minutes to the current datetime

8
console.log(moment().add(30, 'm').format());
9

10
// add '2' days to the current datetime

11
console.log(moment().add(2, 'd').format());
12

13
// add '1' week to the current datetime

14
console.log(moment().add(1, 'w').format());
15

16
// add '1' month to the current datetime

17
console.log(moment().add(1, 'M').format());
18

19
// subtract '1' hour from the current datetime

20
console.log(moment().subtract(1, 'h').format());
21

22
// subtract '30' minutes from the current datetime

23
console.log(moment().subtract(30, 'm').format());
24

25
// subtract '1' day from the current datetime

26
console.log(moment().subtract(1, 'd').format());
27

28
// subtract '1' week from the current datetime

29
console.log(moment().subtract(1, 'w').format());
30

31
// subtract '3' months from the current datetime

32
console.log(moment().subtract(3, 'M').format());

Você pode usar o CodePen abaixo para experimentar diferentes métodos utilitários do Moment e formas de adicionar ou subtrair datas. Para mais informações, recomendo que você visite a documentação oficial.

É assim que você pode usar a biblioteca Moment.js para formatar e manipular datas.

Conclusão

Hoje, discutimos como você pode realizar manipulações de datas com um objeto JavaScript Date. Além do JavaScript vanilla, também exploramos a biblioteca Moment.js, que fornece maneiras bastante fáceis de realizar manipulações de datas.

Deixe uma resposta