alterar o formato da data na página de visualização do laravel

95

Quero alterar o formato da data que é obtido do banco de dados. agora eu tenho 01/10/2016 {{$user->from_date}}. Quero mudar o formato 'dmy' no laravel 5.3

{{ $user->from_date->format('d/m/Y')}}
user3386779
fonte

Respostas:

149

Experimente isto:

date('d-m-Y', strtotime($user->from_date));

Ele irá converter a data em d-m-Yqualquer formato que você tenha fornecido.

Nota: Esta solução é uma solução geral que funciona para php e qualquer um de seus frameworks. Para um método específico do Laravel, tente a solução fornecida por Hamelraj .

Mayank Pandeyz
fonte
2
@ user3386779: Funciona, mas não é a solução mais bonita :) O Laravel tem poucos mecanismos para fazer isso. Se você escolher minha resposta, precisará definir o formato da data em um lugar e não precisa se lembrar de alterar o formato da data toda vez que precisar exibir a from_datecoluna.
Marek Skiba,
@MarekSkiba Mencionei a mesma coisa em minha resposta :)
Mayank Pandeyz
que tal mudar o idioma por exemplo -> 'es' para nomes de meses
Alberto Acuña
1
Concordar com @sadiq você deve usar $ user-> from_date-> format ('d / m / Y')
Erik Larsson
1
Solução ótima e muito simples.
Muddasir23
130

No Laravel usar Carbon é bom

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Hamelraj
fonte
sim, e quando o $ user-> from_date for null?
lewis4u
1
@ lewis4u se você passar um valor nulo para parse(null)ele será convertido como data e hora atual
Hamelraj
1
Correto ... e isso não é bom para alguns casos! Então cuidado!
lewis4u
78

Em seu conjunto de modelos:

protected $dates = ['name_field'];

depois em sua opinião:

{{ $user->from_date->format('d/m/Y') }}

trabalho

HorecioDias
fonte
3
Eu acho que esta é a maneira mais "ampla" de fazer isso, então esta deve ser marcada como a resposta correta.
CodeChuck de
Eu também concordo, esta é a melhor maneira
JonaPkr
Não funciona para mim. Eu já usaria o tipo de coluna datetime e o tipo de coluna timestamp, mas o erro aindaCall to a member function format() on null
Bariq Dharmawan
36

Você pode verificar Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Você precisa definir em sua Usercoluna de modelo from_dateem $datesarray e então você pode alterar o formato em$dateFormat

A outra opção também é colocar este método em seu Usermodelo:

public function getFromDateAttribute($value) {
    return \Carbon\Carbon::parse($value)->format('d-m-Y');
}

e então, se você correr {{ $user->from_date }}, verá o formato que deseja.

Marek Skiba
fonte
concorda que esta é a melhor maneira para laravel
limco
1
A única desvantagem é que ele retornará uma string para a visualização; portanto, se quiser mostrar formatos de data diferentes na mesma visualização, você terá que refazer a data com Carbon.
JustCarty de
Desculpe, este é um Mutator, pois usa getFromDateAttribute em vez de setFromDateAttribute. Pelo que eu sei, mutator usa set e acessor usa get
Shulz
Este retorna a data atual se a coluna for nula
Bariq Dharmawan
14

Data fácil de usar no modelo de lâmina, use Carbon dessa maneira

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Umar Tariq
fonte
11

Existem 3 maneiras de fazer:

1) Usando o modelo Laravel

$user = \App\User::find(1);

$newDateFormat = $user->created_at->format('d/m/Y');

dd($newDateFormat);

2) Usando PHP strtotime

$user = \App\User::find(1);

$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));

dd($newDateFormat2);

3) Usando Carbono

$user = \App\User::find(1);

$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');

dd($newDateFormat3);
Dibyendu Mitra Roy
fonte
10

Método Um:

Usando o strtotime() hora to é o melhor formato para alterar a data para o formato fornecido.

strtotime() - Analise sobre qualquer descrição de data e hora textual em inglês em um carimbo de data / hora Unix

A função espera receber uma string contendo um formato de data em inglês e tentará analisar esse formato em um carimbo de data / hora Unix (o número de segundos desde 1 ° de janeiro de 1970 00:00:00 UTC), relativo ao carimbo de data / hora fornecido em agora, ou a hora atual se now não for fornecida.

Exemplo:

<?php
$timestamp = strtotime( "February 26, 2007" );  
print date('Y-m-d', $timestamp );
?>

Resultado:

2007-02-26

Método dois:

date_format() - Retorne um novo objeto DateTime e formate a data:

<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>

Resultado:

 2013/03/15 00:00:00 
Naresh Kumar P
fonte
5

Você pode usar Carbon::createFromTimestamp

LÂMINA

{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}
kosta
fonte
4

Eu tive um problema semelhante, queria mudar o formato, mas também queria a flexibilidade de poder mudar o formato no mecanismo de template blade.

Eu, portanto, configuro meu modelo da seguinte forma:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

\Carbon\Carbon::setToStringFormat('d-m-Y');

class User extends Model
{
    protected $dates = [
        'from_date',
    ];
}

O setToStringFormatirá definir todas as datas para usar este formato para este modelo.
A vantagem disso para mim é que eu poderia ter o formato que queria sem o modificador, porque com o modificador, o atributo é retornado como uma string, o que significa que no modelo de lâmina eu teria que escrever algo assim se quisesse mude o formato no modelo:

{{ date('Y', strtotime($user->from_date)) }}

O que não é muito limpo.

Em vez disso, o atributo ainda é retornado como uma instância Carbon, no entanto, ele é retornado primeiro no formato desejado.
Isso significa que no modelo eu poderia escrever o seguinte código mais limpo:

{{ $user->from_date->format('Y') }}

Além de poder reformatar a instância Carbon, também posso chamar vários métodos Carbon no atributo do modelo.

Provavelmente, há um descuido nessa abordagem; Aposto que não é uma boa ideia especificar o formato da string na parte superior do modelo, caso isso afete outros scripts. Pelo que vi até agora, isso não aconteceu. Ele mudou apenas o carbono padrão para esse modelo.

Neste caso, pode ser uma boa configuração do formato Carbon de volta ao que era originalmente na parte inferior do script do modelo. Esta é uma ideia encorpada, mas funcionaria para cada modelo ter seu próprio formato.
Ao contrário, se você tiver o mesmo formato para cada modelo, em vez disso, em seu AppServiceProvider. Isso apenas manteria o código mais organizado e fácil de manter.

JustCarty
fonte
0

Às vezes, alterar o formato da data não funciona corretamente, especialmente no Laravel. Então, nesse caso, é melhor usar:

$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));

Então você pode evitar erros como "1970-01-01"!

Cavaleiro Honesto
fonte
Esse não é um problema laravel, relacionado ao php. Leia isto: As datas nos formatos m/d/you d-m-ysão eliminadas da ambigüidade observando o separador entre os vários componentes: se o separador for uma barra (/), o americano m/d/yserá assumido; ao passo que se o separador for um traço (-)ou um ponto (.), o d-m-yformato europeu será assumido. Se, entretanto, o ano for fornecido em um formato de dois dígitos e o separador for um hífen (-), a string de data será analisada como y-m-d. php.net/manual/en/function.strtotime.php
Pandeyz
0

No Laravel você pode adicionar uma função dentro de app / Helper / helper.php como

function formatDate($date = '', $format = 'Y-m-d'){
    if($date == '' || $date == null)
        return;

    return date($format,strtotime($date));
}

E chame esta função em qualquer controlador como este

$start_date = formatDate($start_date,'Y-m-d');

Espero que ajude!

Prasant Kumar
fonte