ฉันต้องการเปลี่ยนรูปแบบวันที่ที่ดึงมาจากฐานข้อมูล ตอนนี้ฉันได้ 2016-10-01 {{$user->from_date}}
ฉันต้องการเปลี่ยนรูปแบบ 'dmy' ใน laravel 5.3
{{ $user->from_date->format('d/m/Y')}}
ฉันต้องการเปลี่ยนรูปแบบวันที่ที่ดึงมาจากฐานข้อมูล ตอนนี้ฉันได้ 2016-10-01 {{$user->from_date}}
ฉันต้องการเปลี่ยนรูปแบบ 'dmy' ใน laravel 5.3
{{ $user->from_date->format('d/m/Y')}}
คำตอบ:
ในชุดโมเดลของคุณ:
protected $dates = ['name_field'];
หลังจากในมุมมองของคุณ:
{{ $user->from_date->format('d/m/Y') }}
ได้ผล
Call to a member function format() on null
คุณสามารถตรวจสอบDate Mutators
: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
คุณต้องตั้งค่าในUser
คอลัมน์โมเดลของคุณfrom_date
ใน$dates
อาร์เรย์จากนั้นคุณสามารถเปลี่ยนรูปแบบในรูปแบบ$dateFormat
ตัวเลือกอื่นก็นำวิธีนี้ไปใช้กับUser
โมเดลของคุณ:
public function getFromDateAttribute($value) {
return \Carbon\Carbon::parse($value)->format('d-m-Y');
}
จากนั้นในมุมมองถ้าคุณเรียกใช้{{ $user->from_date }}
คุณจะเห็นรูปแบบที่คุณต้องการ
วันที่ที่ใช้งานง่ายในเทมเพลตใบมีดใช้คาร์บอนในลักษณะนั้น
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
มี 3 วิธีที่คุณสามารถทำได้:
1) การใช้ Laravel Model
$user = \App\User::find(1);
$newDateFormat = $user->created_at->format('d/m/Y');
dd($newDateFormat);
2) การใช้ PHP strtotime
$user = \App\User::find(1);
$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));
dd($newDateFormat2);
3) การใช้คาร์บอน
$user = \App\User::find(1);
$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');
dd($newDateFormat3);
วิธีที่หนึ่ง:
การใช้strtotime()
เวลาเป็นรูปแบบที่ดีที่สุดในการเปลี่ยนวันที่เป็นรูปแบบที่กำหนด
strtotime()
- แยกวิเคราะห์คำอธิบายวันที่และเวลาที่เป็นข้อความภาษาอังกฤษลงในการประทับเวลา Unix
ฟังก์ชันนี้คาดว่าจะได้รับสตริงที่มีรูปแบบวันที่เป็นภาษาอังกฤษและจะพยายามแยกวิเคราะห์รูปแบบนั้นเป็นการประทับเวลา Unix (จำนวนวินาทีนับตั้งแต่วันที่ 1 มกราคม 1970 00:00:00 UTC) โดยเทียบกับการประทับเวลาที่ระบุในตอนนี้หรือ เวลาปัจจุบันหากไม่ได้ให้มาตอนนี้
ตัวอย่าง:
<?php
$timestamp = strtotime( "February 26, 2007" );
print date('Y-m-d', $timestamp );
?>
เอาท์พุต:
2007-02-26
วิธีที่สอง:
date_format()
- ส่งคืนวัตถุ DateTime ใหม่จากนั้นจัดรูปแบบวันที่:
<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>
เอาท์พุต:
2013/03/15 00:00:00
คุณสามารถใช้ได้ Carbon::createFromTimestamp
ใบมีด
{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}
ฉันมีปัญหาคล้ายกันฉันต้องการเปลี่ยนรูปแบบ แต่ฉันก็ต้องการความยืดหยุ่นในการเปลี่ยนรูปแบบในเอนจินแม่แบบใบมีดด้วย
ดังนั้นฉันจึงตั้งค่าโมเดลของฉันดังต่อไปนี้:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
\Carbon\Carbon::setToStringFormat('d-m-Y');
class User extends Model
{
protected $dates = [
'from_date',
];
}
setToStringFormat
จะกำหนดวันทั้งหมดที่จะใช้รูปแบบนี้สำหรับรุ่นนี้
ข้อได้เปรียบของสิ่งนี้สำหรับฉันคือฉันสามารถมีรูปแบบที่ฉันต้องการได้โดยไม่ต้องมีตัวเปลี่ยนรูปเพราะด้วยตัวเปลี่ยนแอททริบิวต์จะถูกส่งกลับเป็นสตริงซึ่งหมายความว่าในเทมเพลตเบลดฉันจะต้องเขียนอะไรแบบนี้ถ้าฉันต้องการ เปลี่ยนรูปแบบในเทมเพลต:
{{ date('Y', strtotime($user->from_date)) }}
ซึ่งไม่ค่อยสะอาด
แต่แอตทริบิวต์จะยังคงส่งคืนเป็นอินสแตนซ์ Carbon แต่จะส่งคืนครั้งแรกในรูปแบบที่ต้องการ
นั่นหมายความว่าในเทมเพลตฉันสามารถเขียนโค้ดต่อไปนี้ได้สะอาดกว่า:
{{ $user->from_date->format('Y') }}
นอกเหนือจากความสามารถในการฟอร์แมตอินสแตนซ์ Carbon แล้วฉันยังสามารถเรียกใช้วิธี Carbon ต่างๆบนแอตทริบิวต์ในเทมเพลต
อาจมีการกำกับดูแลแนวทางนี้ ฉันจะเดิมพันมันไม่ใช่ความคิดที่ดีที่จะระบุรูปแบบสตริงที่ด้านบนสุดของโมเดลในกรณีที่มีผลกับสคริปต์อื่น ๆ จากที่ฉันได้เห็นจนถึงตอนนี้มันยังไม่เกิดขึ้น มีการเปลี่ยนเฉพาะ Carbon เริ่มต้นสำหรับรุ่นนั้นเท่านั้น
ในกรณีนี้อาจเป็นการดีที่จะตั้งค่ารูปแบบ Carbon ให้กลับไปเป็นแบบเดิมที่ด้านล่างของสคริปต์โมเดล นี่เป็นแนวคิดที่ผิด แต่จะใช้ได้สำหรับแต่ละรุ่นที่มีรูปแบบของตัวเอง
ตรงกันข้ามหากคุณมีรูปแบบเดียวกันสำหรับแต่ละรุ่นให้ใช้ AppServiceProvider แทน นั่นจะทำให้โค้ดดีขึ้นและดูแลรักษาง่ายขึ้น
บางครั้งการเปลี่ยนรูปแบบวันที่ทำงานไม่ถูกต้องโดยเฉพาะใน Laravel ดังนั้นในกรณีนี้ควรใช้:
$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));
จากนั้นคุณสามารถหลีกเลี่ยงข้อผิดพลาดเช่น "1970-01-01"!
m/d/y
หรือd-m-y
รูปแบบถูกทำให้สับสนโดยดูที่ตัวคั่นระหว่างส่วนประกอบต่างๆ: ถ้าตัวคั่นเป็นเครื่องหมายทับ(/)
แสดงm/d/y
ว่าเป็นแบบอเมริกัน ในขณะที่ตัวคั่นเป็นเส้นประ(-)
หรือจุดจะถือว่ารูปแบบ(.)
ยุโรป d-m-y
แต่ถ้าปีจะได้รับในรูปแบบสองหลักและแยกเป็นเส้นประสตริงวันที่จะแยกวิเคราะห์เป็น (-)
php.net/manual/en/function.strtotime.phpy-m-d
ใน Laravel คุณสามารถเพิ่มฟังก์ชันภายใน app / Helper / helper.php เช่น
function formatDate($date = '', $format = 'Y-m-d'){
if($date == '' || $date == null)
return;
return date($format,strtotime($date));
}
และเรียกใช้ฟังก์ชันนี้บนคอนโทรลเลอร์แบบนี้
$start_date = formatDate($start_date,'Y-m-d');
หวังว่าจะช่วยได้!
from_date
คอลัมน์แสดงผล