Bagaimana cara mengatur zona waktu Laravel Carbon untuk cap waktu?

Saya memiliki proyek yang sebagian besar berbasis di wilayah CET. Saya mengatur CET di config/app.php, tetapi semua cap waktu pivot di basis disimpan dalam waktu UTC?

Bagaimana cara menyetel zona waktu "global" untuk stempel waktu?

saya membuat tes ini:

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

dan inilah hasilnya:

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

terima kasih Y


person Yuray    schedule 09.06.2016    source sumber
comment
Bukan jawaban untuk OP, tetapi jika Anda mencari cara mengubah zona waktu mis. masukan waktu zulu, bisa seperti ini 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


Jawaban (6)


Perbarui berkas config/app.php

Misalnya: 'timezone' => 'Asia/Jerusalem' bukannya 'timezone' => 'UTC'

person Adam Pery    schedule 12.07.2019
comment
menurut saya ini jawaban untuk Laravel terbaru kan?? config('app.timezone') akan mempengaruhi zona waktu Carbon, bukan? adakah yang bisa memastikannya? - person Syamsoul Azrien; 09.10.2019
comment
@Syamsoul Azrien Benar - person Adam Pery; 15.07.2020
comment
Saya tidak akan merekomendasikan ini JIKA Anda sudah menerapkan aplikasi Anda secara langsung. Mengubah stempel waktu secara global berarti ia akan mulai menyimpan stempel waktu di database dengan stempel waktu yang diperbarui, artinya beberapa baris database Anda akan disimpan dengan stempel waktu lama dan lainnya - dengan stempel waktu baru... - person Borislav Itskov; 03.11.2020

di AppServiceProvider.php Anda dapat menambahkan fungsionalitas php untuk mengubah stempel waktu untuk keseluruhan proyek

public function boot()
{
    Schema::defaultStringLength(191);
    date_default_timezone_set('Asia/Aden');
}
person Hisham Shami    schedule 07.06.2018
comment
Di Laravel, praktik terbaik adalah memodifikasi timezoneoption dari file config/app.php. - person cespon; 21.02.2019

Anda dapat mencapainya dengan 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
Itu adalah pengakses bukan mutator, namun demikian saya setuju praktik terbaik di sini (terutama jika aplikasi Anda mencakup zona waktu atau digunakan dalam zona waktu yang dipengaruhi oleh perubahan DST) adalah selalu menyimpan tanggal dalam UTC dan hanya mengubah zona waktu ketika tanggalnya adalah ditampilkan, bukan saat disimpan. - person BlueC; 04.01.2020
comment
Terima kasih, ini adalah solusi untuk masalah saya, karena zona waktu bergantung pada pengguna yang masuk ke aplikasi. - person Brec; 09.07.2021

Carbon menggunakan objek PHP DateTime default, jadi gunakan fungsi date_default_timezone_set(), misalnya: date_default_timezone_set('Europe/London');

person thefallen    schedule 09.06.2016
comment
Ini adalah pengaturan file php.ini bernama date.timezone = Australia/Melbourne. Terima kasih telah menunjukkan fungsinya. - person Yevgeniy Afanasyev; 27.02.2018

Jika Anda menggunakan Laravel Carbon TimeStamps, maka Anda harus mengubah zona waktu di file App/Providers/AppServiceProvider.php

// App/Providers/AppServiceProvider.php

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

Sepertinya solusinya adalah dengan menggunakan bukan "CET" tetapi salah satu zona waktu eksplisit, misalnya: "Eropa\Minsk"

Zona Waktu PHP

Zona waktu di Laravel 4

person Yuray    schedule 09.06.2016