จะตั้งค่าเขตเวลา Laravel Carbon สำหรับการประทับเวลาได้อย่างไร

ฉันมีโครงการซึ่งมีพื้นฐานอยู่ในภูมิภาค CET เป็นหลัก ฉันตั้งค่า CET ใน config/app.php แต่การประทับเวลา Pivot ทั้งหมดในฐานจะถูกจัดเก็บเป็นเวลา UTC

ฉันจะตั้งค่าเขตเวลา "ทั่วโลก" สำหรับการประทับเวลาได้อย่างไร

ฉันทำแบบทดสอบนี้:

<?php
$timezone = date_default_timezone_get();
echo "The current server timezone is: " . $timezone;
echo "<br />".date('m/d/Y h:i:s a', time());

$mytime = Carbon\Carbon::now();
echo "<br />".$mytime->toDateTimeString();
?>

และนี่คือผลลัพธ์:

The current server timezone is: CET
06/09/2016 12:06:04 pm
2016-06-09 11:06:04

ขอบคุณ Y


person Yuray    schedule 09.06.2016    source แหล่งที่มา
comment
ไม่ใช่คำตอบสำหรับ OP แต่หากคุณกำลังมองหาวิธีเปลี่ยนเขตเวลาเช่น การป้อนข้อมูลเวลาซูลูสามารถทำได้ดังนี้ Carbon\Carbon::parse('2021-01-28T23:45:00.000000Z')->setTimezone('Europe/Brussels')->format('Y-m-d H:i') =› "2021-01-29 00:45"   -  person PaulH    schedule 28.01.2021


คำตอบ (6)


อัปเดตไฟล์ config/app.php

เช่น 'timezone' => 'Asia/Jerusalem' แทนที่จะเป็น 'timezone' => 'UTC'

person Adam Pery    schedule 12.07.2019
comment
ฉันคิดว่านี่คือคำตอบสำหรับ Laravel ล่าสุดใช่ไหม ?? config('app.timezone') จะส่งผลต่อเขตเวลา Carbon ใช่ไหม? มีใครยืนยันได้ไหม? - person Syamsoul Azrien; 09.10.2019
comment
@Syamsoul Azrien ถูกต้อง - person Adam Pery; 15.07.2020
comment
ฉันจะไม่แนะนำสิ่งนี้หากคุณได้ปรับใช้แอปพลิเคชันของคุณแล้ว การเปลี่ยนการประทับเวลาทั่วโลกหมายความว่าจะเริ่มบันทึกการประทับเวลาในฐานข้อมูลด้วยการประทับเวลาที่อัปเดต ซึ่งหมายความว่าแถวบางแถวของฐานข้อมูลของคุณจะถูกบันทึกด้วยการประทับเวลาแบบเก่าและอื่นๆ ด้วยแถวใหม่... - person Borislav Itskov; 03.11.2020

ใน AppServiceProvider.php คุณสามารถเพิ่มฟังก์ชันการทำงานของ php เพื่อแก้ไขการประทับเวลาสำหรับทั้งโปรเจ็กต์ได้

public function boot()
{
    Schema::defaultStringLength(191);
    date_default_timezone_set('Asia/Aden');
}
person Hisham Shami    schedule 07.06.2018
comment
บน Laravel แนวปฏิบัติที่ดีที่สุดคือการแก้ไข timezoneoption จากไฟล์ config/app.php - person cespon; 21.02.2019

คุณสามารถทำได้ด้วย accessor

public function getCreatedAtAttribute($value)
{
    return Carbon::createFromTimestamp(strtotime($value))
        ->timezone(Config::get('app.timezone'))
        ->toDateTimeString(); //remove this one if u want to return Carbon object
}
person GONG    schedule 09.06.2016
comment
นั่นคือ accessor ไม่ใช่ mutator แต่ถึงกระนั้นฉันก็เห็นด้วยกับแนวปฏิบัติที่ดีที่สุดที่นี่ (โดยเฉพาะอย่างยิ่งหากแอปพลิเคชันของคุณขยายเขตเวลาหรือถูกใช้ในเขตเวลาที่ได้รับผลกระทบจากการเปลี่ยนแปลง DST) คือให้บันทึกวันที่ใน UTC เสมอและเพียงเปลี่ยนเขตเวลาเมื่อถึงวันที่ ปรากฏขึ้น ไม่ใช่เมื่อถูกจัดเก็บ - person BlueC; 04.01.2020
comment
ขอบคุณ นี่คือวิธีแก้ปัญหาของฉัน เนื่องจากเขตเวลาขึ้นอยู่กับผู้ใช้ที่ลงชื่อเข้าใช้แอปพลิเคชัน - person Brec; 09.07.2021

Carbon ใช้ออบเจ็กต์ PHP DateTime เริ่มต้น ดังนั้นให้ใช้ฟังก์ชัน date_default_timezone_set() เช่น: date_default_timezone_set('Europe/London');

person thefallen    schedule 09.06.2016
comment
เป็นการตั้งค่าไฟล์ php.ini ชื่อ date.timezone = Australia/Melbourne ขอบคุณสำหรับการชี้ฟังก์ชั่น - person Yevgeniy Afanasyev; 27.02.2018

หากคุณใช้ Laravel Carbon TimeStamps คุณจะต้องเปลี่ยนเขตเวลาในไฟล์ App/Providers/AppServiceProvider.php

// App/Providers/AppServiceProvider.php

public function boot()
{
    date_default_timezone_set('Asia/Calcutta');
}
person Ashwani Garg    schedule 17.07.2019

ดูเหมือนว่าวิธีแก้ปัญหาคือใช้ไม่ใช่ "CET" แต่เป็นเขตเวลาที่ชัดเจน เช่น "Europe\Minsk"

เขตเวลา PHP

เขตเวลาใน Laravel 4

person Yuray    schedule 09.06.2016