寫入資料庫的時間是我需要的台北標準時間,而使用Model輸出的時間卻仍然是格林威治時間。
route
Route::get('/test', function () {
return App\Models\Post::all();
});
已嘗試
*為.env加上APP_TIMEZONE=Asia/Taipei
*config\app.php修改
'timezone' => 'UTC',
到
'timezone' => env('APP_TIMEZONE', 'UTC'),
*修改php8.1.ini
data.timezone=Asia/Taipei
*重新開機
等方式,仍然無法解決我的問題,想請問是否有人碰過類似的問題,該如何解決?
時間本來就會被轉換,
這樣才不會有時差的問題,
只是要調整輸出的方式就好,
如果要輸出你要的時間可以在你的Model加入這個,
use DateTimeInterface;
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
會轉換所有的DateTime(應該是Timestamp)物件.
感謝您,嘗試過後已經成功了!
我現在倒是不在用 serializeDate 的方式了,改用宣告 cast 的方式處理了
畢竟不需要再多use個日期物件進來。
雖然後來我改成自已的CLASS操作就是了。
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
哦!感謝分享!我晚點回家試試看!
㊣浩瀚星空㊣
我嘗試使用了casts的方法,輸出的時間又會變回格林威治時間..
先清除緩存後再試試。
我不確定你改完ENV是否有重置緩存
那會有影響
好的,感謝您!
我找到問題了,
因為我是使用Laradock環境,結果Laradock裡面env的環境有WORKSPACE_TIMEZONE=UTC,之前並沒有想到這裡會有時區設定,
剛剛突然想到我和大家不同的地方是我有使用Laradock的問題,
搜尋一下就看到有人分享Laradock遇到的坑,
於是將它改成WORKSPACE_TIMEZONE=Asia/Taipei就解決問題了。
現在運行的很好!
原本我已經快要放棄解決這個部分了,
因此還寫了一個js想說直接在前端解決這個問題。
var div = document.querySelectorAll('div')
for (var i = 1; i <= div.length; i++) {
var index = '#time' + i.toString()
var el = document.querySelector(index)
var time = new Date(Date.parse(el.innerText)).toLocaleString({timeZone: 'Asia/Taipei'}, {hour12: false})
el.innerText = `${time}`
}
感謝您的回應!
不,我誤會了,事情仍然沒有解決..
就在我又新增了一筆資料之後
不確定為什麼,但我改成以下這種方式就正常顯示了。
Route
Route::get('/test/{id}', function ($id) {
$post = App\Models\Post::find($id);
return view('testSingle', ['post' => $post]);
});
testSingle
<h1>{{$post->id}}</h1>
<h1>{{$post->content}}</h1>
<div id="time1">{{$post->created_at}}</div>
<div id="time2">{{$post->updated_at}}</div>
Route
Route::get('/test/all', function () {
$post = App\Models\Post::all();
return view('test',['post' => $post]);
});
test
@foreach ($post as $each)
<h1>{{$each->id}}</h1>
<h1>{{$each->content}}</h1>
<div id="time1">{{$each->created_at}}</div>
<div id="time2">{{$each->updated_at}}</div>
@endforeach