Chcę zmienić format daty, który jest pobierany z bazy danych. teraz mam 2016-10-01 {{$user->from_date}}
.Chcę zmienić format 'dmy' w laravel 5.3
{{ $user->from_date->format('d/m/Y')}}
Spróbuj tego:
date('d-m-Y', strtotime($user->from_date));
Konwertuje datę na d-m-Y
lub inny podany przez Ciebie format.
Uwaga: To rozwiązanie jest ogólnym rozwiązaniem, które działa dla PHP i wszystkich jego frameworków. W przypadku metody specyficznej dla Laravel wypróbuj rozwiązanie dostarczone przez Hamelraj .
from_date
kolumny wyświetlania .W Laravel używaj węgla, to dobrze
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
źródło
null
?parse(null)
niego wartość null , zostanie przekonwertowana na aktualną datę i godzinęW Twoim zestawie modeli:
protected $dates = ['name_field'];
po twoim zdaniem:
{{ $user->from_date->format('d/m/Y') }}
Pracuje
źródło
Call to a member function format() on null
Możesz sprawdzić
Date Mutators
: https://laravel.com/docs/5.3/eloquent-mutators#date-mutatorsMusisz ustawić
User
kolumnę modelufrom_date
w$dates
tablicy, a następnie możesz zmienić format w$dateFormat
Inną opcją jest również wprowadzenie tej metody do twojego
User
modelu:public function getFromDateAttribute($value) { return \Carbon\Carbon::parse($value)->format('d-m-Y'); }
a wtedy, jeśli uruchomisz
{{ $user->from_date }}
, zobaczysz żądany format.źródło
Łatwa w użyciu data w szablonie ostrza wykorzystuje w ten sposób Carbon
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
źródło
Możesz to zrobić na 3 sposoby:
1) Korzystanie z modelu Laravel
$user = \App\User::find(1); $newDateFormat = $user->created_at->format('d/m/Y'); dd($newDateFormat);
2) Korzystanie z PHP strtotime
$user = \App\User::find(1); $newDateFormat2 = date('d/m/Y', strtotime($user->created_at)); dd($newDateFormat2);
3) Korzystanie z węgla
$user = \App\User::find(1); $newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y'); dd($newDateFormat3);
źródło
Metoda pierwsza:
strtotime()
Najlepszym formatem do zmiany daty na podany format jest użycie czasu do.strtotime()
- Przetwórz dowolny angielski tekstowy opis daty i godziny w uniksowy znacznik czasuFunkcja oczekuje, że otrzyma ciąg zawierający datę w angielskim formacie i spróbuje przeanalizować ten format na znacznik czasu uniksowego (liczbę sekund od 1 stycznia 1970 00:00:00 UTC), w odniesieniu do sygnatury czasowej podanej w now, lub aktualny czas, jeśli nie jest podany.
Przykład:
<?php $timestamp = strtotime( "February 26, 2007" ); print date('Y-m-d', $timestamp ); ?>
Wynik:
2007-02-26
Metoda druga:
date_format()
- Zwróć nowy obiekt DateTime, a następnie sformatuj datę:<?php $date=date_create("2013-03-15"); echo date_format($date,"Y/m/d H:i:s"); ?>
Wynik:
2013/03/15 00:00:00
źródło
Możesz użyć
Carbon::createFromTimestamp
NÓŻ
{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}
źródło
Miałem podobny problem, chciałem zmienić format, ale chciałem też mieć możliwość zmiany formatu w silniku szablonów blade.
Dlatego ustawiłem mój model w następujący sposób:
<?php namespace App; use Illuminate\Database\Eloquent\Model; \Carbon\Carbon::setToStringFormat('d-m-Y'); class User extends Model { protected $dates = [ 'from_date', ]; }
setToStringFormat
Ustawia wszystkie daty, aby używać tego formatu dla tego modelu.Zaletą tego dla mnie jest to, że mogłem mieć format jaki chciałem bez mutatora, bo przy mutatorze atrybut jest zwracany jako string co oznacza że w szablonie ostrza musiałbym coś takiego napisać gdybym chciał zmień format w szablonie:
{{ date('Y', strtotime($user->from_date)) }}
Co nie jest zbyt czyste.
Zamiast tego atrybut jest nadal zwracany jako instancja Carbon, jednak najpierw jest zwracany w żądanym formacie.
Oznacza to, że w szablonie mógłbym napisać następujący, bardziej przejrzysty kod:
{{ $user->from_date->format('Y') }}
Oprócz możliwości ponownego formatowania instancji Carbon mogę również wywoływać różne metody Carbon w atrybucie w szablonie.
Prawdopodobnie istnieje przeoczenie w tym podejściu; Założę się, że nie jest dobrym pomysłem określanie formatu ciągu na górze modelu, na wypadek gdyby miał on wpływ na inne skrypty.
Z tego, co do tej pory widziałem, tak się nie stało. Zmienił tylko domyślny Carbon tylko dla tego modelu.W tym przypadku może to być dobre ustawienie formatu Carbon z powrotem na to, co pierwotnie znajdowało się na dole skryptu modelowego. To jest pomysł, ale dobrze by było, gdyby każdy model miał swój własny format.
Wręcz przeciwnie, jeśli masz ten sam format dla każdego modelu, zamiast tego w swoim AppServiceProvider. Dzięki temu kod byłby po prostu schludniejszy i łatwiejszy w utrzymaniu.
źródło
Czasami zmiana formatu daty nie działa poprawnie, szczególnie w Laravel. W takim przypadku lepiej użyć:
$date1 = strtr($_REQUEST['date'], '/', '-'); echo date('Y-m-d', strtotime($date1));
Wtedy możesz uniknąć błędów typu „1970-01-01”!
źródło
m/d/y
lubd-m-y
są ujednoznaczniane, patrząc na separator między różnymi składnikami: jeśli separatorem jest ukośnik(/)
,m/d/y
zakłada się, że jest to znak amerykański ; natomiast jeśli separatorem jest myślnik(-)
lub kropka(.)
,d-m-y
to zakłada się format europejski . Jeśli jednak rok jest podany w formacie dwucyfrowym, a separatorem jest myślnik(-)
, ciąg daty jest analizowany jakoy-m-d
. php.net/manual/en/function.strtotime.phpW Laravel możesz dodać funkcję w app / Helper / helper.php, np
function formatDate($date = '', $format = 'Y-m-d'){ if($date == '' || $date == null) return; return date($format,strtotime($date)); }
I wywołaj tę funkcję na dowolnym kontrolerze takim jak ten
$start_date = formatDate($start_date,'Y-m-d');
Mam nadzieję, że to pomoże!
źródło