galera to precisando faze o seguinte:
tenho que somar utilizando javascript uma determinada data com um numero de dias
tipo assim
10/10/2004 + 25 dias = 05/11/2004
a minha data esta nesse mesmo formato
dd/mm/aaaa
alguem sabe como fazer isso?
Soma Em Datas
Started By victormangia, 06/01/2005, 13:16
10 replies to this topic
#2
Posted 06/01/2005, 20:22
Oi, Victor! Blz?
Tive que fazer uma função assim na semana passada lá na empresa, então eu posso te ajudar. Não estou com a função aqui, mas a gente vai montando aos poucos até funfar...
A princípio, já sei que vamos precisar de uma função que retorne o número de dias de qualquer mês/ano. Vc entenderá depois. Aí vai a função:
Agora que temos uma função que verifica o número de dias, vamos criar nossa função que soma datas. Vou dar um exemplo pra mostrar seu funcionamento. Vou chamar de data a tal data à qual você deseja somar os dias.
Agora temos data[0] como sendo o dia, data[1] o mês e data[2] o ano da data. Agora nós vamos somar 70 dias ao dia da data. Olha que loucura...
Vamos supor que nossa data seja 25/11/2004, ok? Como somamos 70 a 25, então temos a variável "diafuturo" com o valor 70+25=95. Aí a gente faz assim:
Olha o que isto significa... Se a soma der um dia que seja menor ou igual ao número de dias do mês atual, ótimo! É como se somássemos 5 dias à data 5/2/2004. Dá 10/2/2004, sem necessidade de passar para o mês seguinte. Mas em nosso caso, entramos no loop, pois diafuturo=95, e o número de dias do mês 11/2004 é 30, portanto entraremos no loop while.
Dentro do loop while a gente faz isso: Tiramos da variável "diafuturo" o número de dias do mês atual. Ou seja: 95-30=65. Logo depois incrementamos a variável "mes". Se ao incrementarmos a gente passar para o mês 13, significa que passamos para o próximo ano. Basta fazer mes=1 e aumentar a variável "ano" em uma unidade. Agora temos a seguinte situação:
diafuturo=65
mes=12
ano=2004
Depois voltamos à condição do loop while. O mês atual é o mês 12 e a variável "diafuturo" vale 65. Verificamos se 65 é maior que o número de dias do mês atual (31). Como é verdade, entramos novamente no loop. Novamente tiramos da variável "diafuturo" o número de dias do mês atual (12/2004, que tem 31 dias). Portanto, "diafuturo" passa a valer 65-31=34. Mais uma vez incrementamos a variável mês, que antes valia 12 e passa a valer 13. Deste modo, aumentamos a variável ano de uma unidade e fazemos mes=1. Agora temos a seguinte situação:
diafuturo=34
mes=1
ano=2005
Mais uma vez entramos na condição do loop while, que verifica que "diafuturo" é maior que o número de dias do mês 1/2005 (31 dias), portanto entramos dentro do loop novamente. Fazemos agora "diafuturo" diminuir em 31 unidades (diafuturo=34-31=3) e aumentamos a variável mês, que agora vale 2. Veja a situação:
diafuturo=3
mes=2
ano=2005
Como agora "diafuturo" é menor que o número de dias deste mês (28 dias), saímos do loop e temos a data correta: 3/2/2005.
A função completa é a seguinte:
Faça este teste pra saber como funciona:
Espero ter ajudado!
Um abraço,
Thales Medeiros.
Tive que fazer uma função assim na semana passada lá na empresa, então eu posso te ajudar. Não estou com a função aqui, mas a gente vai montando aos poucos até funfar...
A princípio, já sei que vamos precisar de uma função que retorne o número de dias de qualquer mês/ano. Vc entenderá depois. Aí vai a função:
function numdias(mes,ano) { //mês ímpar menor que 8 ou mês par maior que 7 tem 31 dias if((mes<8 && mes%2==1) || (mes>7 && mes%2==0)) return 31; //se não for fevereiro, os outros meses que não os de cima têm 30 dias if(mes!=2) return 30; //ano bissexto é múltiplo de 4 if(ano%4==0) return 29; return 28; }
Agora que temos uma função que verifica o número de dias, vamos criar nossa função que soma datas. Vou dar um exemplo pra mostrar seu funcionamento. Vou chamar de data a tal data à qual você deseja somar os dias.
data=data.split('/');
Agora temos data[0] como sendo o dia, data[1] o mês e data[2] o ano da data. Agora nós vamos somar 70 dias ao dia da data. Olha que loucura...
diafuturo=parseInt(data[0])+70;
Vamos supor que nossa data seja 25/11/2004, ok? Como somamos 70 a 25, então temos a variável "diafuturo" com o valor 70+25=95. Aí a gente faz assim:
mes=parseInt(data[1]); ano=parseInt(data[2]); while(diafuturo>numdias(mes,ano)) { diafuturo-=numdias(mes,ano); mes++; if(mes>12) { ano++; mes=1; } }
Olha o que isto significa... Se a soma der um dia que seja menor ou igual ao número de dias do mês atual, ótimo! É como se somássemos 5 dias à data 5/2/2004. Dá 10/2/2004, sem necessidade de passar para o mês seguinte. Mas em nosso caso, entramos no loop, pois diafuturo=95, e o número de dias do mês 11/2004 é 30, portanto entraremos no loop while.
Dentro do loop while a gente faz isso: Tiramos da variável "diafuturo" o número de dias do mês atual. Ou seja: 95-30=65. Logo depois incrementamos a variável "mes". Se ao incrementarmos a gente passar para o mês 13, significa que passamos para o próximo ano. Basta fazer mes=1 e aumentar a variável "ano" em uma unidade. Agora temos a seguinte situação:
diafuturo=65
mes=12
ano=2004
Depois voltamos à condição do loop while. O mês atual é o mês 12 e a variável "diafuturo" vale 65. Verificamos se 65 é maior que o número de dias do mês atual (31). Como é verdade, entramos novamente no loop. Novamente tiramos da variável "diafuturo" o número de dias do mês atual (12/2004, que tem 31 dias). Portanto, "diafuturo" passa a valer 65-31=34. Mais uma vez incrementamos a variável mês, que antes valia 12 e passa a valer 13. Deste modo, aumentamos a variável ano de uma unidade e fazemos mes=1. Agora temos a seguinte situação:
diafuturo=34
mes=1
ano=2005
Mais uma vez entramos na condição do loop while, que verifica que "diafuturo" é maior que o número de dias do mês 1/2005 (31 dias), portanto entramos dentro do loop novamente. Fazemos agora "diafuturo" diminuir em 31 unidades (diafuturo=34-31=3) e aumentamos a variável mês, que agora vale 2. Veja a situação:
diafuturo=3
mes=2
ano=2005
Como agora "diafuturo" é menor que o número de dias deste mês (28 dias), saímos do loop e temos a data correta: 3/2/2005.
A função completa é a seguinte:
function somadias(data, dias) { data=data.split('/'); diafuturo=parseInt(data[0])+dias; mes=parseInt(data[1]); ano=parseInt(data[2]); while(diafuturo>numdias(mes,ano)) { diafuturo-=numdias(mes,ano); mes++; if(mes>12) { mes=1; ano++; } } return diafuturo+"/"+mes+"/"+ano; }
Faça este teste pra saber como funciona:
<html><head><title>Teste</title> <script language=JavaScript> function numdias(mes,ano) { if((mes<8 && mes%2==1) || (mes>7 && mes%2==0)) return 31; if(mes!=2) return 30; if(ano%4==0) return 29; return 28; } function somadias(data, dias) { data=data.split('/'); diafuturo=parseInt(data[0])+dias; mes=parseInt(data[1]); ano=parseInt(data[2]); while(diafuturo>numdias(mes,ano)) { diafuturo-=numdias(mes,ano); mes++; if(mes>12) { mes=1; ano++; } } return diafuturo+"/"+mes+"/"+ano; } alert(somadias("25/11/2004",70)); </script> </head> <body></body></html>
Espero ter ajudado!
Um abraço,
Thales Medeiros.
Sucesso é ganhar dinheiro fazendo o que você faria de graça.
#3
Posted 07/01/2005, 07:37
Valeu cara, tava procurando isso a meses.
#4
Posted 07/01/2005, 07:49
Cara, ficaria muito complicado eu alterar esse script pra mostrar as datas nesse formato
dd/mm/aaaa? nao sei se vc reparou mais a data fica assim 7/2/2004 e teria que ficar assim
07/02/2004 pq eu to usando isso pra fazer uma consulta sql e assim d'a pau.
dd/mm/aaaa? nao sei se vc reparou mais a data fica assim 7/2/2004 e teria que ficar assim
07/02/2004 pq eu to usando isso pra fazer uma consulta sql e assim d'a pau.
#5
Posted 07/01/2005, 14:20
Oi, Victor!
Já que só o código te interessou, mesmo, lá vai só o código;
Um abraço,
Thales Medeiros.
Já que só o código te interessou, mesmo, lá vai só o código;
function somadias(data, dias) { data=data.split('/'); diafuturo=parseInt(data[0])+dias; mes=parseInt(data[1]); ano=parseInt(data[2]); while(diafuturo>numdias(mes,ano)) { diafuturo-=numdias(mes,ano); mes++; if(mes>12) { mes=1; ano++; } } /******ADICIONE ISTO AQUI******/ if(diafuturo<10) diafuturo='0'+diafuturo; if(mes<10) mes='0'+mes; return diafuturo+"/"+mes+"/"+ano; }
Um abraço,
Thales Medeiros.
Sucesso é ganhar dinheiro fazendo o que você faria de graça.
#6
Posted 15/09/2017, 03:12
Baclofen Generique En France online pharmacy Cephalexin Package Insert
Buy Cialis Online Europe
Side Effects Of Alli Weight Loss Pills buy cialis Comprar Cialis En Canada
Buy Cialis Online Europe
Side Effects Of Alli Weight Loss Pills buy cialis Comprar Cialis En Canada
#7
Posted 02/10/2017, 17:14
Finasteride Propecia Achat Effetti Cialis 10 Cialis Periodo Refrattario viagra Order Bulk Cialis
Healthy Male generic viagra levitra Dianiben 850 No Prescription Where to buy generic isotretinoin isotrex shop
Buy Metoprolol Without Scrop Manly 100mg Review Finasteride Delivered levitra 20mg prix El Cialis Funciona Zithromax Antibiotic Over The Counter
Healthy Male generic viagra levitra Dianiben 850 No Prescription Where to buy generic isotretinoin isotrex shop
Buy Metoprolol Without Scrop Manly 100mg Review Finasteride Delivered levitra 20mg prix El Cialis Funciona Zithromax Antibiotic Over The Counter
#8
Posted 10/10/2017, 16:49
Photos De Pilules Amoxil Amoxicillin For Colds Cialis Omeprazolo viagra prescription Vorzeitiger Samenerguss Levitra Dostinex Mg Come Usare Dapoxetina
Medicamento Cialis 10 Low Price On Cialis Canada cialis online Achat Viagra Ligne France En Sarcelles
Canadian Meds Without An Rx Cialis De 5 Mg viagra Cialis Lilly Preisvergleich Cialis Indonesia
Medicamento Cialis 10 Low Price On Cialis Canada cialis online Achat Viagra Ligne France En Sarcelles
Canadian Meds Without An Rx Cialis De 5 Mg viagra Cialis Lilly Preisvergleich Cialis Indonesia
#9
Posted 27/10/2017, 20:21
Buy Cafergot With No Prescription Line sildenafil tadalafil and vardenafil Acheter Tadalafil 40mg
Fedex Shipping Stendra Find Mastercard Basildon How Good Is Kamagra viagra Achat Viagra Pfizer
Levitra Niedriger Blutdruck viagra Viagra En Ligne Danger Generic Viagra Online Canadian Pharmacy
Fedex Shipping Stendra Find Mastercard Basildon How Good Is Kamagra viagra Achat Viagra Pfizer
Levitra Niedriger Blutdruck viagra Viagra En Ligne Danger Generic Viagra Online Canadian Pharmacy
#10
Posted 27/10/2017, 23:15
Secure Place To Buy Yasmin Online Kamagra Overnight Delivery Levitra Da Banco online pharmacy Buy Orlistat From Mexico Vente De Cialis 5 Mg
#11
Posted 12/11/2017, 22:07
Rash On Chest Amoxicillin viagra Achat Du Levitra En Belgique
Where To Buy Nexium viagra Cost For Cialis From Walmart 165 Buy Vagria Hytrin
Canadian Pharmacy Levitra Xenical Online Kaufen Ohne Rezept Online Medication For Gonorrhea buy viagra Levitra 10 Mg Precio
Where To Buy Nexium viagra Cost For Cialis From Walmart 165 Buy Vagria Hytrin
Canadian Pharmacy Levitra Xenical Online Kaufen Ohne Rezept Online Medication For Gonorrhea buy viagra Levitra 10 Mg Precio
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)