Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh menyegerakkan zon waktu PHP dan MySQL dalam aplikasi web saya tanpa mengubah suai konfigurasi pelayan?

Bagaimanakah saya boleh menyegerakkan zon waktu PHP dan MySQL dalam aplikasi web saya tanpa mengubah suai konfigurasi pelayan?

DDD
DDDasal
2024-11-03 20:07:30518semak imbas

How can I synchronize PHP's and MySQL's timezones within my web application without modifying server configurations?

Menyegerakkan Zon Waktu dalam PHP dan MySQL

Dalam aplikasi web, pengendalian nilai masa tarikh dengan tepat merentas zon waktu berbeza adalah penting. Walau bagaimanapun, tetapan zon waktu lalai PHP dan MySQL boleh berbeza, yang membawa kepada percanggahan dalam pengiraan tarikh. Artikel ini meneroka cabaran dalam menetapkan zon waktu dalam PHP dan MySQL serta menyediakan penyelesaian yang komprehensif tanpa mengubah suai konfigurasi pelayan.

Dilema: Zon Waktu Berbeza

Apabila menggunakan tarikh PHP () fungsi, seperti tarikh('Y-m-d H:i:s'), tetapan zon waktu PHP digunakan. Sebaliknya, fungsi NOW() MySQL menggunakan tetapan zon waktu pelayan MySQL. Ketidakpadanan ini boleh mengakibatkan perbandingan dan pengiraan tarikh yang salah.

Percubaan Yang Tidak Berjaya

Pemaju sebelum ini telah mencuba pelbagai kaedah untuk menukar zon waktu, termasuk:

  • Menggunakan date_default_timezone_set('Eropah/Paris') hanya memberi kesan PHP.
  • Menetapkan tarikh.zon waktu melalui PHP tidak memberi kesan kepada MySQL.
  • Menggunakan SELECT CONVERT_TZ(now(), 'GMT', 'MET') mengembalikan hasil kosong.
  • Mengeluarkan SET time_zone = 'Eropah/Paris' dalam konsol MySQL gagal.

Penyelesaian: Penyegerakan

Untuk menyegerakkan zon waktu PHP dan MySQL dalam aplikasi, pendekatan berikut disyorkan:

1. Konfigurasi Zon Waktu PHP

<code class="php">define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);</code>

Tentukan ZON WAKTU malar dan gunakannya untuk menetapkan zon waktu lalai untuk PHP.

2. Pengiraan Zon Waktu MySQL

<code class="php">$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

Kira offset antara masa pelayan dan zon waktu yang dikehendaki.

3. Tetapan Zon Waktu MySQL

<code class="php">// Your DB Connection - sample
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword');
$db->exec("SET time_zone='$offset';");</code>

Lakukan pertanyaan untuk menetapkan zon waktu MySQL kepada offset yang dikira.

Dengan melaksanakan penyelesaian ini, zon waktu PHP dan MySQL dalam aplikasi akan disegerakkan , memastikan pengiraan dan perbandingan masa tarikh yang tepat tanpa mengira konfigurasi pelayan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyegerakkan zon waktu PHP dan MySQL dalam aplikasi web saya tanpa mengubah suai konfigurasi pelayan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn