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')}}

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 .


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')}}

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


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.


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')}}

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);

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 

5

Kamu bisa memakai Carbon::createFromTimestamp

PEDANG

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

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.


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"!


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!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.