Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vinicius Rangel

Intervalo entre datas PHP

Recommended Posts

Fala galera beleza? estou com pouco tempo então vim pedir ajuda de vocês.

 

Alguém sabe onde encontro um script de intervalo entre datas em PHP não pode ser por SQL, bom o que acontece eu recebo duas datas exemplo?

 

data1 - 2012-05-01;

data2 - 2012-05-20;

 

o que parece ser um pouco complicado é eu preciso que isso me retorne todas as datas do intervalo e não simplesmente quantos dias tem.

 

o retorno seria:

 

2012-05-01

2012-05-02

2012-05-03

2012-05-04..

até o

2012-05-20;

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar strtotime() para converter a data para timestamp. depois subtrai as duas e tem a diferença entre elas (em segundos). aí é só dividir por 86400 (60*60*24, ou 24 horas em segundos)

 

 

ps: precisa atualizar o PHP, heim? :P usa o 5.4, que já tem servidor integrado, para testes locais

Compartilhar este post


Link para o post
Compartilhar em outros sites

aahauahuhua não é local, essa é a administração de um parceiro do meu site de compra coletiva.

ele esta no 5.2.17 e estou com medo de pedir att e der algum problema com as modificações.

 

então eu consigo retornar o intervalo por exemplo de 2012-05-01 a 2012-05-10 9 dias sem problema.

 

consigo retornar os meses o ano mais eu preciso laçar como se fosse um foreach para data..

 

OBS: eu fiz dominio.com.br/beta e todos os testes são efetuados online e o parceiro já pode começar a testar sua nova administração através desse caminho

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá.. tente esse "while" com incremento simples unidade a unidade..

(supondo q você vai digitar as datas num form):

<?php
$dia1 = $_POST['dia1'];
$dia2 = $_POST['dia2'];
while ($dia1 <= $dia2) {
echo $dia1++."<br />";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

não da certo.

 

digamos que eu vou comparar de fevereiro e março

 

ai entra meus dados

 

2012-02-01

2012-03-10

 

representados por ano, mês e dia.

 

ele vai me retornar 1,2,3,4,5,6,7,8,9,10 do seu jeito

 

quando na verdade deveria ser bem mais dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consigo retornar os meses o ano mais eu preciso laçar como se fosse um foreach para data..

foreach pra quê? não entendi

 

 

olá.. tente esse "while" com incremento simples unidade a unidade..

(supondo q você vai digitar as datas num form):

<?php
$dia1 = $_POST['dia1'];
$dia2 = $_POST['dia2'];
while ($dia1 <= $dia2) {
echo $dia1++."<br />";
}
?>

 

um loop pra resolver um problema de subtração? não faz sentido

 

 

um exemplo do que citei:

$d1 = '2012-04-20';
$d2 = '2012-05-20';

$diff = strtotime( $d2 ) - strtotime( $d1 );

$diffInDays = $diff / 86400;

echo $diffInDays;

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu consigo retornar quantos dias mes ou ano tem o intervalo sem o menor problema.

 

porém eu preciso retornar 1 por 1 como citei

 

data1 - 2012-05-01;
data2 - 2012-05-20;

o que parece ser um pouco complicado é eu preciso que isso me retorne todas as datas do intervalo e não simplesmente quantos dias tem.

o retorno seria:

2012-05-01
2012-05-02
2012-05-03
2012-05-04..
até o 
2012-05-20;

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah, entendi.

 

aí tem que fazer loop, mesmo. A lógica é parecida. Use strtotime() para converter para timestamp. Dentro do loop, incremente o timestamp inicial em 86400 (24 horas em segundos). A cada incremento, exiba a data.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser uma solução mais tem que levar em conta que podem haver periodos do tipo

 

data inicial 2012-04-25

data final 2012-05-09

 

o que acho que um simples loop não resolva.

 

eu já fiz a conta para me dizer, isso são x dias mais o problema é esse acima. obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não entendeu o que eu expliquei.

 

veja:

$d1 = '2012-04-25';
$d2 = '2012-05-09';

$timestamp1 = strtotime( $d1 );
$timestamp2 = strtotime( $d2 );

$cont = 1;
while ( $timestamp1 <= $timestamp2 )
{
echo $cont . ' - ' . date( 'd/m/Y', $timestamp1 ) . PHP_EOL;
$timestamp1 += 86400;
$cont++;
}

 

Saída

1 - 25/04/2012

2 - 26/04/2012

3 - 27/04/2012

4 - 28/04/2012

5 - 29/04/2012

6 - 30/04/2012

7 - 01/05/2012

8 - 02/05/2012

9 - 03/05/2012

10 - 04/05/2012

11 - 05/05/2012

12 - 06/05/2012

13 - 07/05/2012

14 - 08/05/2012

15 - 09/05/2012

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não entendeu o que eu expliquei.

 

veja:

$d1 = '2012-04-25';
$d2 = '2012-05-09';

$timestamp1 = strtotime( $d1 );
$timestamp2 = strtotime( $d2 );

$cont = 1;
while ( $timestamp1 <= $timestamp2 )
{
	echo $cont . ' - ' . date( 'd/m/Y', $timestamp1 ) . PHP_EOL;
	$timestamp1 += 86400;
	$cont++;
}
Saída

 

Olá Beraldo,

estou usando este código e funcionou perfeitamente, saindo na tela do jeito que eu pedi no formato que o mysql aceita 2015-02-09; os valores também saíram em sequência, porém ao gravar no BD a data sai sempre

0000-00-00, mesmo criando o número de linhas referente ao intervalo.

pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você printou a data na tela, para ver e está correta?

Método simples:

1º Vai no BD faça um insert.

2º Copie a query de inserção

3º Cole na variável que executará a query, exemplo: $inserir = mysql_query("...");

4º Execute novamente o código

Esse método é o mais simples e rápido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Domenike

Quero fazer de forma automática, ao executar o código; mudei apenas a linha seguinte:

echo date( 'Y-m-d', $timestamp1 ) . PHP_EOL;

para sair conforme o mysql aceita; o restante deve ser a inserção no BD:

mysql_connect('localhost','root','XXXX');
mysql_select_db('XXXX');
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
$inseredados=mysql_query("INSERT INTO fevereiro(data) VALUES ('$timestamp1')");
a saída no BD é sempre 0000-00-00, apesar de na tela sair correto 2012-04-25 até 2012-05-09

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que LOUCURA!!!

não entendi nada!

a coisa é bem mais simples, como eu disse na tela a data sai no formato correto. ex: 2015-02-08;

com esse tal de date('Y-m-d', $timestamp1) no código é que tá complicando...

no BD sai sempre 0000-00-00

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.