Estou procurando a maneira mais fácil e limpa de adicionar X meses a uma data do JavaScript.
Prefiro não lidar com a rolagem do ano ou ter que escrever minha própria função .
Existe algo embutido que pode fazer isso?
javascript
date
Chade
fonte
fonte
Respostas:
A função a seguir adiciona meses a uma data em JavaScript ( fonte ). Ele leva em consideração as renovações por ano e os vários meses:
A solução acima abrange o caso extremo de mudar de um mês com um número maior de dias que o mês de destino. por exemplo.
Se o dia do mês mudar durante a inscrição
setMonth
, sabemos que transbordamos para o mês seguinte devido a uma diferença na duração do mês. Nesse caso,setDate(0)
costumamos voltar ao último dia do mês anterior.Nota: esta versão desta resposta substitui uma versão anterior (abaixo) que não lidava normalmente com comprimentos de mês diferentes.
fonte
addMonths
função aqui que respeita o final do mês (por exemplo,2012-01-31 + 1 month = 2012-02-29
e assim por diante).Estou usando a biblioteca moment.js para manipulações de data e hora . Código de exemplo para adicionar um mês:
fonte
Essa função lida com casos extremos e é rápida:
teste:
Atualização para datas não UTC: (por A.Hatchkins)
teste:
fonte
Considerando que nenhuma dessas respostas será responsável pelo ano atual em que o mês for alterado, você pode encontrar uma que fiz abaixo e que deve lidar com isso:
O método:
Uso:
fonte
Tomado de @bmpsini e @Jazaret respostas, mas não se estendendo protótipos: o uso de funções simples ( Por que está estendendo objetos nativos uma má prática? ):
Use-o:
fonte
Das respostas acima, o único que lida com casos de borda (biblioteca da bmpasini da datejs) tem um problema:
OK mas:
pior :
Isso ocorre porque o horário não está sendo definido, revertendo para 00:00:00, que pode ser alterado para o dia anterior devido a alterações de fuso horário ou economia de tempo ou o que for ...
Aqui está a minha solução proposta, que não tem esse problema e também é, acho, mais elegante, pois não depende de valores codificados.
Unidade testada com sucesso com:
fonte
Como a maioria das respostas destacou, poderíamos usar o método setMonth () junto com o método getMonth () para adicionar um número específico de meses a uma determinada data.
Exemplo: (como mencionado por @ChadD em sua resposta.)
Mas devemos usar essa solução com cuidado, pois teremos problemas com casos extremos.
Para lidar com casos extremos, é útil uma resposta dada no link a seguir.
https://stackoverflow.com/a/13633692/3668866
fonte
Solução simples:
2678400000
é de 31 dias em milissegundosAtualizar:
Use esses dados para criar nossa própria função:
2678400000
- 31 dias2592000000
- 30 dias2505600000
- 29 dias2419200000
- 28 diasfonte
Os meses têm um índice baseado em 0, ele deve alertar (4) que é 5 (maio);
fonte
Apenas para adicionar à resposta aceita e aos comentários.
fonte
Eu escrevi esta solução alternativa que funciona bem para mim. É útil quando você deseja calcular o final de um contrato. Por exemplo, start = 15-0-2016, meses = 6, end = 14-14-2016 (ou seja, último dia - 1):
Exemplos:
fonte
A seguir, é apresentado um exemplo de como calcular uma data futura com base na entrada de data (MembershipSignup_date) + meses adicionados (MembershipMonths) por meio de campos de formulário.
O campo membershipsmonths possui um valor padrão 0
Link de acionamento (pode ser um evento onchange anexado ao campo do termo de associação):
fonte
Como demonstrado por muitas das complicadas e feias respostas apresentadas, Datas e horários podem ser um pesadelo para programadores que usam qualquer idioma. Minha abordagem é converter datas e valores 'delta t' em Epoch Time (em ms), executar qualquer aritmética e depois converter novamente em "human time".
Isso foi escrito para um caso de uso um pouco diferente, mas você deve poder adaptá-lo facilmente para tarefas relacionadas.
EDIT: Fonte completa aqui !
fonte
Tudo isso parece muito complicado e eu acho que entra em debate o que exatamente adicionar "um mês" significa. Isso significa 30 dias? Isso significa do 1º ao 1º? Desde o último dia até o último dia?
Se este último, adicionar um mês a 27 de fevereiro o levará a 27 de março, mas adicionar um mês a 28 de fevereiro o levará a 31 de março (exceto em anos bissextos, onde o levará a 28 de março). Subtrair um mês de 30 de março leva você a ... 27 de fevereiro? Quem sabe...
Para quem procura uma solução simples, basta adicionar milissegundos e pronto.
ou
fonte
d.setMonth(d.getMonth()+1)
? Portanto, essa nem é a idéia mais simples.fonte
Às vezes, criar data útil por um operador, como nos parâmetros BIRT
Eu fiz 1 mês atrás com:
fonte
Como o método indicado acima, você pode adicionar um mês para
Date
funcionar.fonte