ubah format tanggal di halaman tampilan laravel

94

Saya ingin mengubah format tanggal yang diambil dari database. sekarang saya mendapat 2016-10-01. {{$user->from_date}}Saya ingin mengubah format 'dmy' di laravel 5.3

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

Jawaban:

145

Coba ini:

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

Ini akan mengubah tanggal menjadi d-m-Yatau format apa pun yang Anda berikan.

Catatan: Solusi ini adalah solusi umum yang berfungsi untuk php dan kerangka kerjanya. Untuk metode khusus Laravel, coba solusi yang disediakan oleh Hamelraj .

Mayank Pandeyz
sumber
2
@ user3386779: Ini berfungsi tetapi bukan solusi yang paling bagus :) Laravel memiliki sedikit mekanisme untuk melakukan hal ini. Jika Anda memilih jawaban saya, Anda perlu mengatur format tanggal di satu tempat dan tidak perlu ingat untuk mengubah format tanggal setiap kali Anda membutuhkan from_datekolom tampilan .
Marek Skiba
@MarekSkiba Saya telah menyebutkan hal yang sama dalam jawaban saya :)
Mayank Pandeyz
bagaimana mengubah bahasa misalnya -> 'es' untuk nama bulan
Alberto Acuña
1
Setuju dengan @sadiq Anda harus menggunakan $ user-> from_date-> format ('d / m / Y')
Erik Larsson
1
Solusi hebat dan sangat sederhana.
Muddasir23
129

Di Laravel gunakan Carbon yang bagus

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Hamelraj
sumber
ya, dan bagaimana jika $ user-> from_date null?
lewis4u
1
@ lewis4u jika Anda memberikan nilai nol ke parse(null)dalamnya akan dikonversi sebagai waktu tanggal saat ini
Hamelraj
1
Benar ... dan itu tidak baik untuk beberapa kasus! Jadi hati-hati!
lewis4u
73

Di set Model Anda:

protected $dates = ['name_field'];

setelah dalam pandanganmu:

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

bekerja

HorecioDias
sumber
3
Saya pikir ini adalah "cara paling laravel" untuk melakukan ini jadi ini harus ditandai sebagai jawaban yang benar.
CodeChuck
saya setuju juga, ini adalah cara terbaik
JonaPkr
Itu tidak berhasil untuk saya. Saya akan alreay pada tipe kolom datetime dan tipe kolom timestamp, tapi kesalahannya masihCall to a member function format() on null
Bariq Dharmawan
36

Anda dapat memeriksa Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Anda perlu mengatur Userkolom model Anda from_datedalam $datesarray dan kemudian Anda dapat mengubah format dalam$dateFormat

Opsi lain juga meletakkan metode ini ke Usermodel Anda :

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

dan kemudian di view jika dijalankan {{ $user->from_date }}anda akan melihat format yang anda inginkan.

Marek Skiba
sumber
setuju bahwa ini adalah cara yang lebih baik untuk laravel
limco
1
Satu-satunya kelemahan adalah ia akan mengembalikan string ke tampilan; jadi jika Anda ingin menunjukkan format tanggal yang berbeda dalam tampilan yang sama maka Anda harus mengubah tanggal dengan Carbon.
JustCarty
Maaf tentang ini, apakah ini Mutator karena menggunakan getFromDateAttribute daripada setFromDateAttribute. Dari apa yang saya tahu mutator menggunakan set dan accessor menggunakan get
Shulz
Ini kembali tanggal sekarang jika kolomnya nol
Bariq Dharmawan
14

Tanggal yang mudah digunakan dalam templat pisau, gunakan Karbon seperti itu

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

Ada 3 cara yang bisa Anda lakukan:

1) Menggunakan Model Laravel

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

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

dd($newDateFormat);

2) Menggunakan strtotime PHP

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

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

dd($newDateFormat2);

3) Menggunakan Karbon

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

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

dd($newDateFormat3);
Dibyendu Mitra Roy
sumber
9

Metode Satu:

Menggunakan strtotime()to time adalah format terbaik untuk mengubah tanggal ke format yang diberikan.

strtotime() - Parsing tentang deskripsi tanggal waktu tekstual bahasa Inggris ke dalam stempel waktu Unix

Fungsi tersebut mengharapkan untuk diberikan string yang berisi format tanggal Inggris dan akan mencoba untuk mengurai format tersebut menjadi stempel waktu Unix (jumlah detik sejak 1 Januari 1970 00:00:00 UTC), relatif terhadap stempel waktu yang diberikan sekarang, atau waktu saat ini jika sekarang tidak tersedia.

Contoh:

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

Keluaran:

2007-02-26

Metode Kedua:

date_format() - Kembalikan objek DateTime baru, lalu format tanggal:

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

Keluaran:

 2013/03/15 00:00:00 
Naresh Kumar P.
sumber
5

Kamu bisa memakai Carbon::createFromTimestamp

PEDANG

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

Saya memiliki masalah serupa, saya ingin mengubah formatnya, tetapi saya juga menginginkan fleksibilitas untuk dapat mengubah format di mesin template blade juga.

Oleh karena itu, saya mengatur model saya sebagai berikut:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

Ini setToStringFormatakan mengatur semua tanggal untuk menggunakan format ini untuk model ini.
Keuntungan dari ini bagi saya adalah saya dapat memiliki format yang saya inginkan tanpa mutator, karena dengan mutator, atribut dikembalikan sebagai string yang berarti bahwa dalam templat pisau saya harus menulis sesuatu seperti ini jika saya mau ubah format di template:

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

Yang tidak terlalu bersih.

Sebaliknya, atribut tersebut masih dikembalikan sebagai contoh Karbon, namun atribut tersebut dikembalikan pertama kali dalam format yang diinginkan.
Itu berarti bahwa di template saya bisa menulis kode berikut, lebih bersih,:

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

Selain dapat memformat ulang contoh Karbon, saya juga dapat memanggil berbagai metode Karbon pada atribut di templat.

Mungkin ada kekeliruan dalam pendekatan ini; Saya berani bertaruh bukanlah ide yang baik untuk menentukan format string di bagian atas model jika itu mempengaruhi skrip lain. Dari apa yang saya lihat sejauh ini, itu belum terjadi. Itu hanya mengubah Karbon default untuk model itu saja.

Dalam hal ini, mungkin ini adalah pengaturan yang baik untuk mengembalikan format Carbon ke format semula di bagian bawah skrip model. Ini adalah ide bertubuh, tetapi akan bekerja untuk setiap model untuk memiliki formatnya sendiri.
Sebaliknya, jika Anda memiliki format yang sama untuk setiap model maka di AppServiceProvider Anda. Itu hanya akan membuat kode lebih rapi dan lebih mudah dipelihara.

JustCarty
sumber
0

Terkadang mengubah format tanggal tidak berfungsi dengan baik, terutama di Laravel. Jadi dalam hal ini, lebih baik menggunakan:

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

Kemudian Anda dapat menghindari kesalahan seperti "1970-01-01"!

Ksatria Jujur
sumber
Itu bukan masalah laravel, yang berhubungan dengan php. Baca ini: Tanggal dalam format m/d/yatau d-m-ydisederhanakan dengan melihat pemisah antara berbagai komponen: jika pemisahnya berupa garis miring (/), maka orang Amerika m/d/ydianggap; sedangkan jika pemisahnya berupa tanda hubung (-)atau titik (.), maka d-m-yformat Eropa diasumsikan. Namun, jika tahun diberikan dalam format dua digit dan pemisahnya berupa tanda hubung (-), string tanggal akan diuraikan sebagai y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz
0

Di Laravel Anda dapat menambahkan fungsi di dalam app / Helper / helper.php seperti

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

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

Dan panggil fungsi ini pada pengontrol seperti ini

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

Semoga membantu!

Prasant Kumar
sumber