Ir para conteúdo

POWERED BY:

Arquivado

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

Helmesvs

Tempo e data

Recommended Posts

Pessoal estou fazendo um site de noticias e vou colocar la a hora e data de cada publicação. Se foi postado a alguns minutos ai aparece "a alguns minutos" se foi de hj que aparecesse "Hoje" caso fosse de outro dia que aparecesse o dia.. Se alguem souber como me ajude

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só olhar os exemplos na documentação do Carbon. Funciona direitinho:

 

 

$ php -a
Interactive shell
php > require 'vendor/autoload.php';
php > echo Carbon\Carbon::now()->subMinutes(2)->diffForHumans() . PHP_EOL;
2 minutes ago

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve adaptar ao seu caso.

O exemplo era subtrair dois minutos da data atual. O seu caso é uma diferença entre datas. Isso é abordado aqui na documentação oficial do Carbon

 

Lembrando que o Carbon é uma extensão da classe DateTime. Ou seja, tudo que ela faz, o Carbon faz igual

Compartilhar este post


Link para o post
Compartilhar em outros sites
$data_atual = Carbon::createFromDate(2000, 1, 1, 'America/Toronto');
$data_post = Carbon::createFromDate(2000, 1, 1, 'America/Vancouver');
echo $data_atual->diffInHours($data_post);   

Peguei esse exemplo la e tentei adaptar aqui, mas ainda nao estou conseguindo. Nao consigo achar uma forma de colocar a variavel $linha['datahora'] pra fazer a diferença com a hr atual.

 

E tenho uma duvida, o 'America/Toronto' eu mudaria pra Brazil? Sendo que lá é -4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa do diffForHumans, pelo que entendi

 

veja:

 

$date1 = new Carbon('2015-09-07 10:00:00');
$date2 = new Carbon('2015-09-07 12:30:00');
var_dump($date1->diffForHumans($date2));

 

Use "America/Sao_Paulo".

Veja o timezones: http://php.net/manual/pt_BR/timezones.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

É justamente ai que não to conseguindo, eu recebo o valor da data e hora por essa variavel $linha['datahora']

Mas não sei como colocar os valores dela pra comparação. Do jeito que você fez ai eu tinha conseguido aqui, mas na hr de usar essa variável invés do valor ja predefinido, que eu tenho dificuldade.

 

E tbm queria saber como pegar a hora atual, porq eu usei o now mas ta vindo 5 hrs a mais se nao me engano

Compartilhar este post


Link para o post
Compartilhar em outros sites

É justamente ai que não to conseguindo, eu recebo o valor da data e hora por essa variavel $linha['datahora'][/size]

Mas não sei como colocar os valores dela pra comparação. Do jeito que você fez ai eu tinha conseguido aqui, mas na hr de usar essa variável invés do valor ja predefinido, que eu tenho dificuldade.

Leia os links que mando.

Eu mesmo escrevi aqui que o Carbon é uma extensão do DateTime. Ou seja, basta passar a data desejada no construtor:

 

$date = new Carbon('2015-09-08');
// ou
$date = new Carbon($variavel_com_a_data);

 

Veja:

http://carbon.nesbot.com/docs/#api-instantiation

 

 

E tbm queria saber como pegar a hora atual, porq eu usei o now mas ta vindo 5 hrs a mais se nao me engano

Basta ajustar o Timezone

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sempre leio os links que manda, mas ainda to no começo da programação. Conheço a linguagem a 3 meses e so mecho nas hrs vagas. Por isso tenho tanta dificuldade. Mas enfim eu conseguir fazer aqui, ficou assim:

<?php 
Carbon::setLocale('pt_BR');
setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
   date_default_timezone_set('America/Sao_Paulo');

   $date1 = Carbon::now('America/Sao_Paulo');
   $date2 = new Carbon($linha['datahora']);

   echo ($date2->diffForHumans($date1));
?>

Mas invés de me retorna "Há 5 horas", esta me retornando "5 horas antes".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo isso explicado aqui:

 

 


This method will add a phrase after the difference value relative to the instance and the passed in instance. There are 4 possibilities:

 

When comparing a value in the past to default now:
1 hour ago
5 months ago

When comparing a value in the future to default now:
1 hour from now
5 months from now

When comparing a value in the past to another value:
1 hour before
5 months before

When comparing a value in the future to another value:
1 hour after
5 months after

Fonte: http://carbon.nesbot.com/docs/#api-humandiff

 

Ou seja, se comparar duas datas, mostrará "x horas antes". Se comparar com a data corrente, mostrará "há X horas".

Isso porque "há X horas" só pode ser em relação à hora atual. Se for entre duas datas fixas, tem que dizer 'antes' ou 'depois', não 'há'. É uma questão semântica

 

Faça o teste:

 

$date1 = Carbon::now('America/Sao_Paulo');
$date2 = new Carbon('2015-09-08 07:00:00');
 
var_dump($date2->diffForHumans($date1));
var_dump($date2->diffForHumans());

 

saída:

 


string(13) "6 horas antes"
string(11) "há 6 horas"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo isso explicado aqui:

 

 

Fonte: http://carbon.nesbot.com/docs/#api-humandiff

 

Ou seja, se comparar duas datas, mostrará "x horas antes". Se comparar com a data corrente, mostrará "há X horas".

Isso porque "há X horas" só pode ser em relação à hora atual. Se for entre duas datas fixas, tem que dizer 'antes' ou 'depois', não 'há'. É uma questão semântica

 

Faça o teste:

$date1 = Carbon::now('America/Sao_Paulo');
$date2 = new Carbon('2015-09-08 07:00:00');
 
var_dump($date2->diffForHumans($date1));
var_dump($date2->diffForHumans());

saída:

Ficou perfeito. Muito obrigado Beraldo!

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.