Rumah  >  Soal Jawab  >  teks badan

Apabila mengembalikan hasil Laravel kepada pengguna, zon waktu dipaparkan secara tidak betul.

<p>Saya mempunyai API Laravel dan zon waktu aplikasi ditetapkan kepada UTC. Zon waktu MySQL ditetapkan kepada SYSTEM, yang juga dinyatakan sebagai UTC. Saya juga mempunyai lajur dalam jadual pengguna yang menyimpan maklumat zon waktu pengguna. <br /><br />Antara muka hadapan saya mempunyai medan di mana pengguna boleh memasukkan tarikh/masa sebagai masa proses tertentu dan masa ini akan dihantar ke API dalam masa pengguna Kawasan. Jadi apabila rekod itu disimpan, saya menukarnya kepada UTC dan kemudian memasukkannya ke dalam pangkalan data seperti ini </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'), ]); </pra> <p>Saya cuba mendapatkan rekod semua proses pengguna untuk hari semasa dalam zon waktu pengguna semasa dan mengembalikan hasil tersebut ke bahagian hadapan. Saya fikir keputusan itu betul, tetapi apabila komputer saya sampai ke tengah malam, keputusan masih ditunjukkan sebagai rekod hari sebelumnya selama kira-kira 10 jam atau lebih. Beginilah cara saya cuba mengembalikan hasil ini;</p> <pre class="brush:php;toolbar:false;">$todayProcedures = Prosedur::query() ->di mana('user_id', $user->id) ->whereDate('procedure_time', '>=', Carbon::now()->startOfDay()->tz($user->timezone)) ->whereDate('procedure_time', '<=', Carbon::now()->endOfDay()->tz($user->timezone)) ->dapatkan(); </pra> <p>Saya tidak dapat mengetahui di mana silap saya. </p>
P粉536909186P粉536909186474 hari yang lalu547

membalas semua(1)saya akan balas

  • P粉006977956

    P粉0069779562023-07-28 09:50:53

    Saya menggunakan kaedah whereBetween dan menukar permulaan dan penghujung hari menggunakan zon waktu pengguna. Dengan cara ini pangkalan data akan disoal berdasarkan waktu tempatan pengguna dan anda sepatutnya boleh mendapatkan hasil yang betul.

    $todayProcedures = Procedure::query()
        ->where('user_id', $user->id)
        ->whereBetween('procedure_time', [
            Carbon::now()->startOfDay()->setTimezone($user->timezone)->toDateTimeString(),
            Carbon::now()->endOfDay()->setTimezone($user->timezone)->toDateTimeString(),
        ])
        ->get();

    Apabila berurusan dengan cap masa dalam aplikasi anda, adalah penting untuk mengendalikan penukaran zon waktu dengan betul. Untuk memastikan ketekalan dan ketepatan, sila ikut garis panduan ini:

    1. Storan Pangkalan Data: Sentiasa simpan cap masa dalam pangkalan data menggunakan format UTC. Melakukan ini memastikan bahawa semua cap masa adalah diseragamkan, bebas daripada mana-mana zon waktu tertentu.
    2. Pertanyaan penukaran zon waktu: Penukaran zon waktu dilakukan apabila menanyakan pangkalan data, bukan apabila rekod dimasukkan atau dikemas kini. Dengan melakukan ini, anda memastikan bahawa data yang diambil daripada pangkalan data adalah konsisten dan tepat tanpa mengira zon waktu pengguna.
    3. Paparan Berdasarkan Zon Masa Pengguna: Lakukan penukaran yang diperlukan apabila memaparkan cap masa kepada pengguna atau memproses berdasarkan keutamaan zon waktu mereka. Dengan melaraskan cap masa kepada zon waktu pengguna, anda boleh memberikan pengalaman yang lebih mesra pengguna dan setempat.
    Ikuti garis panduan ini dan aplikasi anda akan mengekalkan data cap masa yang tepat dan memberikan hasil yang konsisten merentas zon waktu yang berbeza.


    balas
    0
  • Batalbalas