Bei der Rückgabe von Laravel-Ergebnissen an den Benutzer wird die Zeitzone falsch angezeigt.
P粉536909186
2023-07-27 11:05:57
<p>Ich habe eine Laravel-API und die Zeitzone der Anwendung ist auf UTC eingestellt. Die Zeitzone von MySQL ist auf SYSTEM eingestellt, was auch als UTC ausgedrückt wird. Ich habe auch eine Spalte in der Benutzertabelle, in der die Zeitzoneninformationen des Benutzers gespeichert sind. <br /><br />Meine Front-End-Schnittstelle verfügt über ein Feld, in das der Benutzer ein Datum/eine Uhrzeit als Uhrzeit eines bestimmten Prozesses eingeben kann. Diese Zeit wird in der Zeit des Benutzers an die API gesendet Zone. Wenn dieser Datensatz gespeichert ist, konvertiere ich ihn in UTC und füge ihn dann wie folgt in die Datenbank ein: </p><p><br /></p>
<pre class="brush:php;toolbar:false;">auth()->user()->procedure()->create([
'procedure_time' => Carbon::parse($request->procedure_time, auth()->user()->timezone)->setTimezone('UTC'),
]);
</pre>
<p>Ich versuche, Datensätze aller Benutzerprozesse für den aktuellen Tag in der Zeitzone des aktuellen Benutzers abzurufen und diese Ergebnisse an das Frontend zurückzugeben. Ich dachte, die Ergebnisse seien korrekt, aber als mein Computer Mitternacht erreichte, zeigten die Ergebnisse etwa zehn Stunden lang immer noch die Aufzeichnungen des Vortages an. So versuche ich, diese Ergebnisse zurückzugeben;</p>
<pre class="brush:php;toolbar:false;">$todayProcedures = Procedure::query()
->where('user_id', $user->id)
->whereDate('procedure_time', '>=', Carbon::now()->startOfDay()->tz($user->timezone))
->whereDate('procedure_time', '<=', Carbon::now()->endOfDay()->tz($user->timezone))
->get();
</pre>
<p>Ich kann nicht herausfinden, wo ich einen Fehler gemacht habe. </p>
我使用了whereBetween方法,并使用用户的时区转换了一天的开始和结束时间。这样,数据库将根据用户的本地时间进行查询,您应该能够得到正确的结果。
在处理应用程序中的时间戳时,正确处理时区转换非常重要。为了确保一致性和准确性,请遵循以下准则: