Lors du renvoi des résultats Laravel à l'utilisateur, le fuseau horaire ne s'affiche pas correctement.
P粉536909186
2023-07-27 11:05:57
<p>J'ai une API Laravel et le fuseau horaire de l'application est défini sur UTC. Le fuseau horaire de MySQL est défini sur SYSTEM, qui est également exprimé en UTC. J'ai également une colonne dans la table des utilisateurs qui stocke les informations de fuseau horaire de l'utilisateur. <br /><br />Mon interface frontale a un champ dans lequel l'utilisateur peut saisir une date/heure comme heure d'un certain processus, et cette heure sera envoyée à l'API au moment de l'utilisateur. zone. Ainsi, lorsque cet enregistrement est enregistré, je le convertis en UTC, puis je l'insère dans la base de données comme ceci </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'),
]);
≪/pré>
<p>J'essaie d'obtenir des enregistrements de tous les processus utilisateur pour la journée en cours dans le fuseau horaire de l'utilisateur actuel et de renvoyer ces résultats au frontend. Je pensais que les résultats étaient corrects, mais lorsque mon ordinateur est arrivé à minuit, les résultats étaient toujours affichés comme les enregistrements de la veille pendant environ 10 heures. C'est ainsi que j'essaie de renvoyer ces résultats ;</p>
<pre class="brush:php;toolbar:false;">$todayProcedures = Procedure::query()
->où('id_utilisateur', $user->id)
->whereDate('procedure_time', '>=', Carbon::now()->startOfDay()->tz($user->timezone))
->whereDate('procedure_time', '<=', Carbon::now()->endOfDay()->tz($user->timezone))
->obtenir();
≪/pré>
<p>Je n'arrive pas à comprendre où je me suis trompé. </p>
J'ai utilisé la méthode WhereBetween et converti le début et la fin de la journée en utilisant le fuseau horaire de l'utilisateur. De cette façon, la base de données sera interrogée en fonction de l'heure locale de l'utilisateur et vous devriez pouvoir obtenir les résultats corrects.
Lorsque vous traitez les horodatages dans votre application, il est important de gérer correctement les conversions de fuseau horaire. Pour garantir la cohérence et l'exactitude, veuillez suivre ces directives :