Tôi muốn thay đổi định dạng ngày được tìm nạp từ cơ sở dữ liệu. bây giờ tôi đã nhận 2016-10-01. {{$user->from_date}}
Tôi muốn thay đổi định dạng 'dmy' trong laravel 5.3
{{ $user->from_date->format('d/m/Y')}}
Tôi muốn thay đổi định dạng ngày được tìm nạp từ cơ sở dữ liệu. bây giờ tôi đã nhận 2016-10-01. {{$user->from_date}}
Tôi muốn thay đổi định dạng 'dmy' trong laravel 5.3
{{ $user->from_date->format('d/m/Y')}}
Câu trả lời:
Thử đi:
date('d-m-Y', strtotime($user->from_date));
Nó sẽ chuyển đổi ngày tháng thành d-m-Y
hoặc bất kỳ định dạng nào bạn đã đưa ra.
Lưu ý: Giải pháp này là giải pháp chung hoạt động cho php và bất kỳ khuôn khổ nào của nó. Đối với một phương pháp cụ thể của Laravel, hãy thử giải pháp được cung cấp bởi Hamelraj .
Trong Laravel sử dụng Carbon tốt của nó
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
null
?
parse(null)
nó sẽ chuyển đổi thành ngày giờ hiện tại
Trong bộ Mô hình của bạn:
protected $dates = ['name_field'];
sau khi bạn xem:
{{ $user->from_date->format('d/m/Y') }}
làm
Call to a member function format() on null
Bạn có thể kiểm tra Date Mutators
: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
Bạn cần đặt User
cột mô hình của mình from_date
trong $dates
mảng và sau đó bạn có thể thay đổi định dạng trong$dateFormat
Một tùy chọn khác cũng được đặt phương pháp này vào User
mô hình của bạn :
public function getFromDateAttribute($value) {
return \Carbon\Carbon::parse($value)->format('d-m-Y');
}
và sau đó nếu bạn chạy, {{ $user->from_date }}
bạn sẽ thấy định dạng mà bạn muốn.
Có 3 cách mà bạn có thể làm:
1) Sử dụng mô hình Laravel
$user = \App\User::find(1);
$newDateFormat = $user->created_at->format('d/m/Y');
dd($newDateFormat);
2) Sử dụng PHP strtotime
$user = \App\User::find(1);
$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));
dd($newDateFormat2);
3) Sử dụng Carbon
$user = \App\User::find(1);
$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');
dd($newDateFormat3);
Phương pháp một:
Sử dụng strtotime()
thời gian là định dạng tốt nhất để thay đổi ngày thành định dạng nhất định.
strtotime()
- Phân tích cú pháp về bất kỳ mô tả ngày giờ bằng văn bản tiếng Anh nào thành dấu thời gian Unix
Hàm dự kiến sẽ được cung cấp một chuỗi chứa định dạng ngày tiếng Anh và sẽ cố gắng phân tích định dạng đó thành dấu thời gian Unix (số giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 UTC), liên quan đến dấu thời gian được cung cấp hiện tại, hoặc thời gian hiện tại nếu bây giờ không được cung cấp.
Thí dụ:
<?php
$timestamp = strtotime( "February 26, 2007" );
print date('Y-m-d', $timestamp );
?>
Đầu ra:
2007-02-26
Phương pháp hai:
date_format()
- Trả về một đối tượng DateTime mới, rồi định dạng ngày tháng:
<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>
Đầu ra:
2013/03/15 00:00:00
Tôi đã gặp vấn đề tương tự, tôi muốn thay đổi định dạng, nhưng tôi cũng muốn sự linh hoạt của việc có thể thay đổi định dạng trong công cụ mẫu phiến.
Do đó, tôi thiết lập mô hình của mình như sau:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
\Carbon\Carbon::setToStringFormat('d-m-Y');
class User extends Model
{
protected $dates = [
'from_date',
];
}
Các setToStringFormat
sẽ đặt tất cả các ngày để sử dụng định dạng này cho mô hình này.
Lợi thế của điều này đối với tôi là tôi có thể có định dạng mà tôi muốn mà không có trình đột biến, bởi vì với trình đột biến, thuộc tính được trả về dưới dạng chuỗi có nghĩa là trong mẫu lưỡi kiếm, tôi sẽ phải viết một cái gì đó như thế này nếu tôi muốn thay đổi định dạng trong mẫu:
{{ date('Y', strtotime($user->from_date)) }}
Nó không sạch lắm.
Thay vào đó, thuộc tính vẫn được trả về dưới dạng cá thể Carbon, tuy nhiên, lần đầu tiên nó được trả về ở định dạng mong muốn.
Điều đó có nghĩa là trong mẫu, tôi có thể viết đoạn mã sau, gọn gàng hơn:
{{ $user->from_date->format('Y') }}
Ngoài việc có thể định dạng lại phiên bản Carbon, tôi cũng có thể gọi các phương thức Carbon khác nhau trên thuộc tính trong khuôn mẫu.
Có thể có một sự giám sát đối với cách tiếp cận này; Tôi sẽ đánh cuộc không phải là một ý kiến hay nếu chỉ định định dạng chuỗi ở đầu mô hình trong trường hợp nó ảnh hưởng đến các tập lệnh khác. Từ những gì tôi đã thấy cho đến nay, điều đó đã không xảy ra. Nó chỉ thay đổi Carbon mặc định cho mô hình đó mà thôi.
Trong trường hợp này, có thể là một cách tốt để đặt định dạng Carbon trở lại như ban đầu ở cuối tập lệnh mô hình. Đây là một ý tưởng có cơ sở, nhưng nó sẽ hoạt động đối với mỗi mô hình có định dạng riêng.
Ngược lại, nếu bạn đang có cùng một định dạng cho từng mô hình thì thay vào đó trong AppServiceProvider của bạn. Điều đó sẽ chỉ giữ cho mã gọn gàng hơn và dễ bảo trì hơn.
Đôi khi việc thay đổi định dạng ngày không hoạt động đúng cách, đặc biệt là trong Laravel. Vì vậy, trong trường hợp đó, tốt hơn là sử dụng:
$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));
Sau đó, bạn có thể tránh lỗi như "1970-01-01"!
m/d/y
hoặc d-m-y
được phân biệt bằng cách nhìn vào dấu phân cách giữa các thành phần khác nhau: nếu dấu phân cách là dấu gạch chéo (/)
thì m/d/y
giả định là người Mỹ ; trong khi nếu dấu phân cách là dấu gạch ngang (-)
hoặc dấu chấm (.)
, thì d-m-y
định dạng Châu Âu được giả định. Tuy nhiên, nếu năm được cho ở định dạng hai chữ số và dấu phân tách là dấu gạch ngang (-)
, thì chuỗi ngày được phân tích cú pháp thành y-m-d
. php.net/manual/en/function.strtotime.php
Trong Laravel, bạn có thể thêm một hàm bên trong app / Helper / helper.php như
function formatDate($date = '', $format = 'Y-m-d'){
if($date == '' || $date == null)
return;
return date($format,strtotime($date));
}
Và gọi hàm này trên bất kỳ bộ điều khiển nào như thế này
$start_date = formatDate($start_date,'Y-m-d');
Hy vọng nó giúp!
from_date
cột hiển thị .