Ajuste automático de datas em JavaScript
JavaScript tem uma característica muito interessante e útil:
se um momento de tempo inválido for especificado ao criar um objeto Date,
ele será automaticamente recalculado para um momento válido.
Vamos ver um exemplo.
Como você sabe, não existe o dia 35 de janeiro.
O dia máximo possível em janeiro é 31.
Isso significa que nossa data de 35 de janeiro
tem 4 dias extras. Nesse caso, o JavaScript simplesmente
adicionará esses 4 dias extras ao próximo mês:
let date = new Date(2018, 0, 35);
console.log(date); // resultará em 4 de fevereiro
Você pode especificar meses extras, não apenas dias extras.
Lembre-se de que os meses começam em zero, portanto,
o último mês válido é o 11. Se você especificar o 12 mês,
obterá janeiro do próximo ano:
let date = new Date(2018, 12, 1); // especificamos o 12º mês
console.log(date); // resultará em 1º de janeiro de 2019
O ajuste descrito também funciona na direção decrescente.
Como você sabe, o dia mais baixo do mês é o dia número 1.
Portanto, se você especificar o dia número 0,
obterá o último dia do mês anterior:
let date = new Date(2018, 1, 0); // especificamos o dia zero
console.log(date); // resultará em 31 de janeiro
Você também pode especificar valores negativos para dias e meses.
Lembre-se de que o dia mínimo tem o número 1 e
o mês mínimo tem o número 0. Isso significa que
o dia -1 corresponde ao 2 dia a partir do final do mês anterior,
e o mês -1 simplesmente corresponde ao último mês do ano anterior:
let date = new Date(2018, 1, -1); // especificamos -1 dia
console.log(date); // resultará em 30 de janeiro
let date = new Date(2018, -1, 1); // especificamos -1 mês
console.log(date); // resultará em 1º de dezembro de 2017
Tudo o que foi dito acima também funciona com horas, minutos e segundos:
let date = new Date(2018, 0, 1, 24, 0, 0); // especificamos a 24ª hora
console.log(date); // resultará em 2 de janeiro, 0 horas
let date = new Date(2018, 0, 1, 25, 0, 0); // especificamos a 25ª hora
console.log(date); // resultará em 2 de janeiro, 1 hora
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 1, 35);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 15, 1);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 3, 31);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 1, 31);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 12, 33);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 33, 33);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 5, 0);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 0, 0);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, -12, -33);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // qual será a data?
Determine para qual data JavaScript converterá o seguinte momento de tempo:
let date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // qual será a data?