Laravel görünüm sayfasında tarih formatını değiştirin


94

Veritabanından alınan tarih formatını değiştirmek istiyorum. şimdi 2016-10-01 var {{$user->from_date}}. laravel 5.3'te 'dmy' formatını değiştirmek istiyorum

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

Yanıtlar:


145

Bunu dene:

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

Tarihi d-m-Yveya vermiş olduğunuz formata dönüştürecektir .

Not: Bu çözüm, php ve herhangi bir çerçevesi için çalışan genel bir çözümdür. Laravel'e özgü bir yöntem için, Hamelraj tarafından sağlanan çözümü deneyin .


2
@ user3386779: Çalışıyor ama en güzel çözüm değil :) Laravel'in bunu yapmak için birkaç mekanizması var. Cevabımı seçerseniz, tek bir yerde tarih formatını ayarlamanız gerekir ve her görüntü from_datesütununa ihtiyacınız olduğunda tarih formatını değiştirmeyi hatırlamanız gerekmez .
Marek Skiba

@MarekSkiba Cevabımda da aynı şeyi
belirtmiştim

peki ya dili değiştirmek üzere -> ay isimleri için 'es'
Alberto Acuña

1
@Sadiq ile anlaşın $ user-> from_date-> formatını kullanmanız gerekir ('g / a / Y')
Erik Larsson

1
Harika ve çok basit bir çözüm.
Muddasir23

129

Laravel kullanımı ise Karbon onun iyi

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

evet, ve $ user-> from_date ne zaman null?
lewis4u

1
@ lewis4u eğer null değeri girerseniz parse(null)geçerli tarih saati olarak
dönüşür

1
Doğru ... ve bu bazı durumlarda iyi değil! Öyleyse dikkat et!
lewis4u

73

Model setinizde:

protected $dates = ['name_field'];

sizin görüşünüzden sonra:

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

İşler


3
Bence bunu yapmanın en "büyük yolu" budur, bu yüzden bu doğru cevap olarak işaretlenmelidir.
CodeChuck

Ben de katılıyorum, en iyi yol bu
JonaPkr

Benim için çalışmıyor. Tarih-saat sütun türü ve zaman damgası sütun türü konusunda Call to a member function format() on null
yaşardım

36

Kontrol edebilirsiniz Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Eğer belirlenen ihtiyaç Usermodeli sütununda from_dateyer $datesdizideki sonra sizden biçimini değiştirebilirsiniz$dateFormat

Diğer bir seçenek de bu yöntemi Usermodelinize koymaktır :

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

ve sonra görünümde çalıştırırsanız {{ $user->from_date }}istediğiniz formatı göreceksiniz.


bunun laravel için daha iyi bir yol olduğuna katılıyorum
limco

1
Tek dezavantajı, görünüme bir dize döndürmesidir; bu nedenle, aynı görünümde farklı tarih formatlarını göstermek istiyorsanız, tarihi Carbon ile yeniden ayrıştırmanız gerekecektir.
JustCarty

Bunun için üzgünüz, setFromDateAttribute yerine getFromDateAttribute kullandığı için bu bir Mutator mu? Bildiğim kadarıyla mutator set kullanır ve erişimci get kullanır
Shulz

Sütun boşsa bu geçerli tarihi döndürür
Bariq Dharmawan

14

Bıçak şablonunda kullanımı kolay tarih, Carbon'u bu şekilde kullanın

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

10

Yapabileceğiniz 3 yol vardır:

1) Laravel Modelini Kullanma

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

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

dd($newDateFormat);

2) PHP strtotime'ı kullanma

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

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

dd($newDateFormat2);

3) Karbon Kullanımı

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

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

dd($newDateFormat3);

9

Birinci Yöntem:

strtotime()Saati kullanmak, tarihi verilen biçime değiştirmek için en iyi biçimdir.

strtotime() - Herhangi bir İngilizce metinsel tarih saat açıklamasını Unix zaman damgasına ayrıştırın

İşlev, İngilizce tarih biçimini içeren bir dizge verilmesini bekler ve bu biçimi şu anda verilen zaman damgasına göre bir Unix zaman damgasına (1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısı) ayrıştırmaya çalışır veya şimdi sağlanmadıysa geçerli saat.

Misal:

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

Çıktı:

2007-02-26

İkinci Yöntem:

date_format() - Yeni bir DateTime nesnesi döndürün ve ardından tarihi biçimlendirin:

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

Çıktı:

 2013/03/15 00:00:00 

5

Kullanabilirsiniz Carbon::createFromTimestamp

BIÇAK AĞZI

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

4

Benzer bir sorun yaşadım, formatı değiştirmek istedim, ancak aynı zamanda blade şablon motorundaki formatı değiştirebilme esnekliğini de istedim.

Bu nedenle modelimi şu şekilde kurdum:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

setToStringFormatBu model için bu formatı kullanmak için tüm tarihleri ayarlayacaktır.
Bunun benim için avantajı, mutatör olmadan istediğim formata sahip olabilmemdir, çünkü mutatörde özellik bir dizge olarak döndürülür, yani bıçak şablonunda istersem buna benzer bir şey yazmam gerekirdi. şablondaki biçimi değiştirin:

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

Bu çok temiz değil.

Bunun yerine, özellik yine de bir Carbon örneği olarak döndürülür, ancak önce istenen biçimde döndürülür.
Bu, şablonda şu, daha temiz, kodu yazabileceğim anlamına gelir:

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

Carbon örneğini yeniden biçimlendirebilmenin yanı sıra, şablondaki öznitelik üzerinde çeşitli Carbon yöntemleri de çağırabilirim.

Muhtemelen bu yaklaşıma yönelik bir gözetim vardır; Bahse girerim, diğer komut dosyalarını etkilemesi ihtimaline karşı modelin üst kısmında dize formatını belirtmenin iyi bir fikir olmadığını düşünüyorum.Şimdiye kadar gördüklerime göre, bu olmadı. Yalnızca bu model için varsayılan Carbon'u değiştirdi.

Bu durumda, Carbon formatını orijinal olarak model betiğinin altındaki haline getirmek iyi bir fikir olabilir. Bu köklü bir fikir, ancak her modelin kendi formatına sahip olması işe yarayacaktır.
Aksine, her model için aynı biçime sahipseniz, bunun yerine AppServiceProvider'ınızda. Bu, kodu daha temiz tutar ve bakımı daha kolay olur.


0

Bazen tarih formatını değiştirmek, özellikle Laravel'de düzgün çalışmaz. Yani bu durumda kullanmak daha iyidir:

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

O zaman "1970-01-01" gibi hatalardan kaçınabilirsiniz!


Bu php ile ilgili bir büyük sorun değil. Şunu okuyun: m/d/yveya d-m-ybiçimlerindeki tarihler, çeşitli bileşenler arasındaki ayırıcıya bakılarak belirsizliği giderilir: ayırıcı bir eğik çizgiyse (/), Amerikan m/d/yvarsayılır; oysa ayırıcı bir tire (-)veya nokta ise (.), Avrupa d-m-ybiçimi varsayılır. Bununla birlikte, yıl iki basamaklı bir biçimde verilmişse ve ayırıcı bir tire (-)ise, tarih dizesi olarak ayrıştırılır y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz

0

Laravel'de app / Helper / helper.php içine bir işlev ekleyebilirsiniz.

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

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

Ve bu işlevi bunun gibi herhangi bir denetleyicide çağırın

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

Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.