Vedere corectă a fusurile orare în php

Ce este UTC

Formatul UTC standuri pentru "timp universal" si este succesorul lui „Greenwich Mean Time» (GMT). Aceste două formate sunt aproape identice, dar UTC este considerat a fi standardul acceptat. În general, UTC bazat pe alocarea de 40 de zone de timp diferite. Pentru un punct de referință în UTC a decis să ia ora 00:00. Totalul obținut 12 fusuri orare de bază ca un pozitiv sau o valoare negativă, precum și unele zone de timp suplimentare, cum ar fi o jumătate de UTC 04: 30. Ideea este că, dacă aveți fusul orar UTC -05: 00. atunci trebuie să scădeți 5 ore de la un primar UTC +00: 00. pentru a atinge conformitatea necesară. Adică, în cazul în care este ora 14:00 (sau 14:00) și fusul orar este UTC-05: 00 (EST și de Est fus orar), apoi UTC +00: 00 va fi egal cu ora 19:00 (sau 19).

Timp de stocare în formatul UTC +00: 00

Primul lucru pe care trebuie să facem - să decidă ce fusul orar utilizat pentru stocarea tuturor valorilor noastre. Recomand cu tărie că vom lua UTC +00: 00 - fără nici un motiv, altul decât cel care este ușor de reținut și 0 reprezintă un punct de plecare ideal. Din moment ce știm că toate datele sunt în UTC +00: 00. devine mult mai ușor să prezinte momentul potrivit pentru fiecare utilizator în funcție de zonele lor de timp personale. Odată ce utilizatorul a selectat (sau avem de detectare automate) fusul orar, ieșirea din momentul potrivit pentru utilizator devine banal.

Setarea fusului orar prestabilit

Presupunând că toate data / ora noastre stocate în UTC, putem seta doar fusul orar prestabilit, care va fi utilizat pentru a afișa de fiecare dată. Acest lucru va ajusta în mod automat data și ora pentru un anumit utilizator. În PHP, tot ce trebuie să facem - este de a seta fusul orar, de exemplu:

Putem face acest lucru în orice bloc de initializare la începutul codul nostru - și ați terminat: toate datele sunt afișate în mod corespunzător pentru fusul orar în care se află utilizatorul.

Dacă vrem să obțină un control complet asupra ora și data, putem construi o funcție după cum urmează:

Configurarea PHP sub UTC +00: 00

Desigur, totul nu a fost atât de simplu, dacă nu ne-am înființat sistemul nostru sub UTC, ca fusul orar prestabilit. Sunt încrezător că acest lucru se poate face aproximativ la fel în alte limbi, dar PHP se face după cum urmează:

Acum, ori de câte ori folosim lucruri, cum ar fi, de exemplu, timpul de funcția (). ne oferă automat ora în UTC cu compensare corespunzător în funcție de timpul nostru de server. Dacă vrem să reglați data, într-o astfel de bază de date cum ar fi MySQL, face acest lucru:

Dacă nu am avea acces la schimbarea configurației PHP, atunci trebuie să se adapteze setarea timpului manual data, astfel:

Configurarea MySQL pentru UTC +00: 00

Data de instalare directă, așa cum am făcut mai sus, se aplică, dacă nu avem permisiunea de a controla parametrii de configurare MySQL. Cu toate acestea, dacă dorim să folosim TIMESTAMP. care este, în general auto-reînnoire, sau o funcție de alegere MySQL, cum ar fi ACUM (). noi trebuie să configurați MySQL pentru a utiliza UTC ca fusul orar prestabilit.

În MySQL, acest lucru se face prin setarea UTC offset, care se poate face la fel de ușor cum a fost în PHP, făcând următoarele modificări:

Actualizarea data / ora existente

Dacă decideți să standardizeze zonele de timp UTC, în cazul în care fusul orar este implicit UTC +00: 00 deplasare, este acum momentul actual în baza de date va fi inoperabil.

Din fericire, MySQL oferă o funcție convenabilă care ne permite să actualizeze cu ușurință fusuri orare existente.

NOTĂ: Dacă aveți marcaje de timp, acestea ar trebui să fie modernizate mai întâi.

Putem căuta în toate domeniile în baza noastră de date data și ora folosind următoarea interogare:

Prin urmare, putem folosi următoarea interogare pentru a actualiza data / ora în tabelele noastre:

În cazul în care -05: 00 - fusul orar curent, într-un format care stochează timpul (este la fel ca în cazul precedent, se referă la est). Fus orar 00: 00. în care dorim să se transforme, în acest caz, se referă la UTC.