Задаване на часова зона в PHP. Правилен изглед на часовите зони в PHP Php часова зона

25.10.2021

Ако забележите, че часът на вашия сайт не съответства на вашата часова зона и искате да го коригирате, има няколко начина да направите това. Повечето услуги за споделен хостинг забраняват редактирането на този файл, но не се отчайвайте, можете да постигнете същия резултат, като направите някои промени във файла .htaccess. IN това ръководствоще научите как да промените часовата зона на вашия сайт.

Преди да започнете това ръководство, ще ви трябва следното:

  • Достъп до хостинг контролен панел или FTP

Стъпка 1 - Намерете и редактирайте файла .htaccess

Файл .htaccessе в каталога public_html. Можете да го отворите с Файлов мениджър в контролния панел на вашия хостинг или като се свържете с вашия сметкачрез FTP клиент (например FileZilla). Тези ръководства обхващат подробно двата метода:

Стъпка 2 - Намиране на правилната часова зона

Списък на всички поддържани часови зони може да бъде намерен на този сайт.

Първо изберете вашия регион.

Сега изберете часовата зона, която искате да използвате. В нашия случай ще изберем Европа/Москва.

Стъпка 3 - Настройка на часовата зона чрез .htaccess

След като разберете формата на вашата часова зона, отворете файла .htaccess. След това добавете следния код в най-горната част на файла .htaccess:

Php_value date.timezone "Европа/Москва"

ВАЖНО! Вместо Европа/Москва въведете желаната часова зона.

Поздравления, успешно променихте часовата зона на вашия сайт!

Заключение

Този бърз урок ви показа как да промените часовата зона на уебсайта си чрез .htaccess. Сега не е нужно да се притеснявате за грешното време на уебсайта си.


Това е кратка статия за това как да работите с часови зони, когато съхранявате стойности за дата/час в база данни. Базата данни или езикът за програмиране, който решите да използвате, не е критичен, тъй като явленията, описани в статията, са универсални. Ще покажа моите действия, използвайки примера за използване на комбинация от MySQL и PHP. Проблемът, свързан с часовите зони, е доста тривиален. Много хора често забравят за тяхното съществуване, а някои ги смятат за нещо прекалено сложно. Обикновено, когато настройвате база данни или използвате услуга за уеб хостинг, вашите часови зони са конфигурирани по подразбиране. Настройките по подразбиране са добри, ако работите с един сървър, но какво ще стане, ако решите да го преместите?

Същият въпрос е логичен, ако имате няколко сървъра на различни места.
Вместо да съхранявате часови зони с всяка дата, по-добре е да го базирате на стандартно време и да свържете всичките си дати с него. Този метод ви позволява да промените към стандартно време, преди стойността да бъде съхранена в базата данни. Като цяло е добра идея просто да използвате UTC +00:00.

Какво е UTC

UTC означава координирано универсално време и е наследник на средното време по Гринуич (GMT). Двата формата са почти идентични, но UTC се счита за приет стандарт. Като цяло UTC се основава на 40 различни часови зони. Обичайно е да се вземе 00:00 часа като начална точка в UTC. Общо има 12 основни часови зони, както с положителни, така и с отрицателни стойности, както и някои допълнителни часови зони, като например половинчасови UTC +04:30. Идеята е, че ако имате часова зона UTC -05:00, тогава ще трябва да извадите 5 часа от първоначалния UTC +00:00за да постигнете желаното прилягане. Тоест, ако е 14:00 (или 14:00) и вашата часова зона UTC-05:00(EST или Източна часова зона), тогава UTC +00:00ще бъде равно на 19:00 (или 19:00).
  • Графично представяне на световните часови зони (Уикипедия)
  • Списък на съкращенията на часовите зони (Уикипедия)

Съхраняване на времето във формат UTC +00:00

Първото нещо, което трябва да направим, е да решим коя часова зона да използваме, за да съхраняваме всички наши стойности. Силно препоръчвам да го вземете като основа UTC +00:00- без особена причина, освен че е лесно за запомняне и 0 представлява идеална отправна точка. Тъй като знаем, че всички дати са включени UTC +00:00, става много по-лесно да се представи точното време за всеки потребител въз основа на техните лични часови зони. След като даден потребител е избрал (или ние сме открили автоматично) своята часова зона, показването на подходящото време за този потребител става обичайно.

Задаване на часовата зона по подразбиране

Ако приемем, че всички наши дати/часове се съхраняват в UTC, можем просто да зададем часова зона по подразбиране, която да се използва за показване всеки път. Това автоматично ще избере датата и часа за конкретен потребител. В PHP всичко, което трябва да направим, е да зададем часовата зона, както следва:
date_default_timezone_set("EST");
Можем да направим това в някакъв блок за инициализация в началото на нашия код и сме готови: всички дати ще бъдат показани по подходящ начин за часовата зона, в която се намира потребителят.

Ако искаме да имаме пълен контрол върху датата и часа, можем да изградим функцията по следния начин:
функция get_date($date) ( date_default_timezone_set("EST"); $date = date("Y-m-d H:i:s", strtotime($date)); date_default_timezone_set("UTC"); върне $date; )

Настройка на PHP за UTC +00:00

Разбира се, нещата нямаше да са толкова прости, ако не бяхме конфигурирали нашата система да използва UTC като часова зона по подразбиране. Сигурен съм, че това може да се направи почти по същия начин на други езици, но PHP го прави по следния начин:
date.timezone = UTC
Сега всеки път, когато използваме неща като функцията време(), това автоматично ни дава UTC времето с подходящото отместване въз основа на нашето сървърно време. Ако искаме да настроим дати в база данни като MySQL, ще направим следното:
date("Y-m-d H:i:s", time());
Ако не сме имали достъп за промяна на PHP конфигурацията, тогава трябва да зададем часа ръчно, когато задаваме датата, както следва:
date("Y-m-d H:i:s", time() - date("Z"));

Настройка на MySQL за UTC +00:00

Директното задаване на датата, както направихме по-горе, е приложимо, ако нямаме достъп за промяна на конфигурационните параметри на MySQL. Въпреки това, ако искаме да използваме КЛАПОТО ЗА ЧАС, която обикновено се самоактуализира, или функция за дата на MySQL като СЕГА()тогава трябва да конфигурираме MySQL да използва UTC като часова зона по подразбиране.

В MySQL това се прави чрез задаване на UTC отместването, което може да се направи също толкова лесно, колкото беше в PHP, като се направят следните промени:
часова зона по подразбиране = "+00:00"

Актуализиране на съществуващи дати/часове

Ако решите да стандартизирате часовите зони с помощта на UTC, къде е часовата зона по подразбиране UTC +00:00офсет, тогава сега ваш текущо времевъв вашата база данни няма да работи.

За щастие, MySQL предоставя удобна функция, която ни дава възможност лесно да актуализираме съществуващите часови зони.

ЗАБЕЛЕЖКА: Ако имате времеви отпечатъци, те първо трябва да бъдат актуализирани.

Можем да търсим във всички полета за дата и час в нашата база данни, като използваме следната заявка:
SELECT * FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA`="име_на_таблица" AND (`DATA_TYPE`="timestamp" OR `DATA_TYPE`="datetime" OR `DATA_TYPE`="date");
От тук можем да използваме следната заявка, за да актуализираме датите/часовете в нашите таблици:
UPDATE `table_name` SET `timestamp`=CONVERT_TZ(`timestamp`, "-05:00", "+00:00");
Къде -05:00 - текущата часова зона във формата, в който се съхранява времето (както в предишния случай, това се отнася за източната). Часова зона +00:00 , в който искаме да конвертираме, в този случай се отнася за UTC.

Ако в процеса на управление на виртуален хостинг има нужда от промяна на часовата зона по подразбиране, това действие може лесно да се извърши в няколко стъпки, които са описани по-долу.

Промяна на часовата зона чрез Избор на PHP версия

За да промените часовата зона, отидете на cPanel -> Софтуер -> Изберете PHP версия -> Преминете към PHP опции.

Следващата стъпка е да промените стойността на променливата дата.часова зонакъм часовата зона, от която се нуждаете. Можете да намерите списък с налични часови зони в последния параграф на статията.

След извършване на необходимите промени е важно да кликнете върху бутона „Запазване на промените“, който се намира в долната част на страницата PHP селектор.

За да сте сигурни, че зададената стойност на часовата зона е приложена, можете да използвате функцията PHP phpinfo(), който показва информация за всички зададени параметри php. За да направите това, създайте в public_htmlщракнете върху бутона "файл"в менюто на диспечера.

  • В полето Ново име на файлпосочете, например, phpinfo.phpслед това щракнете върху бутона Създаване на нов файл.

  • В резултат на това файлът с посоченото име ще се появи в списъка с други на хостинга.
  • След това трябва да отворите този файл за редактиране. За да направите това, щракнете с левия бутон върху необходимия файл, след което в менюто на диспечера щракнете върху бутона промяна.
  • Във формуляра, който се показва, оставете всички параметри по подразбиране и щракнете върху бутона Редактиране, за да отворите текстов редактор.

  • В прозореца, който се отваря, трябва да въведете следния код:

След това запишете файла и го отворете в браузъра си. IN в този примерфайлът ще бъде достъпен на:

http://main_domain/phpinfo.php

На страницата, която се отваря, намерете секцията дата, който ще съдържа таблица със стойността на текущата часова зона. В този случай горната зона се показва Европа/Киев.

Това завършва процеса на промяна на часовата зона.

Списък с часови зони за конфигуриране на часовата зона

Освен това по-долу прилагаме списък с възможни стойности на часовата зона:

Африка/Кайро Африка/Казабланка Африка/Хараре Африка/Монровия Африка/Найроби Америка/Богота Америка/Буенос_Айрес Америка/Каракас Америка/Чихуахуа Америка/Ла_Паз Америка/Лима Америка/Мазатлан ​​Америка/Мексико_Сити Америка/Монтерей Америка/Сантяго Америка/Тихуана Азия/ Алмати Азия/Багдад Азия/Баку Азия/Банкок Азия/Чонгкинг Азия/Дака Азия/Хонконг Азия/Иркутск Азия/Джакарта Азия/Йерусалим Азия/Кабул Азия/Карачи Азия/Катманду Азия/Колката Азия/Красноярск Азия/Куала_Лумпур Азия/Кувейт Азия /Магадан Азия/Мускат Азия/Новосибирск Азия/Рияд Азия/Сеул Азия/Сингапур Азия/Тайпе Азия/Ташкент Азия/Тбилиси Азия/Техеран Азия/Токио Азия/Улан Батор Азия/Урумчи Азия/Владивосток Азия/Якутск Азия/Екатеринбург Азия/Ереван Atlantic/Azores Atlantic/Cape_Verde Atlantic/Stanley Australia/Adelaide Australia/Brisbane Australia/Canberra Australia/Darwin Australia/Hobart Australia/Melbourne Australia/Perth Australia/Sydney Canada/Atlantic Canada/Newfoundland Canada/Saskatchewan Europe/Amsterdam Europe/Athens Europe/ Белград Европа/Берлин Европа/Братислава Европа/Брюксел Европа/Букурещ Европа/Будапеща Европа/Копенхаген Европа/Дъблин Европа/Хелзинки Европа/Истанбул Европа/Киев Европа/Лисабон Европа/Любляна Европа/Лондон Европа/Мадрид Европа/Минск Европа/Москва Европа /Париж Европа/Прага Европа/Рига Европа/Рим Европа/Сараево Европа/Скопие Европа/София Европа/Стокхолм Европа/Талин Европа/Виена Европа/Вилнюс Европа/Волгоград Европа/Варшава Европа/Загреб Гренландия Пасифик/Окланд Пасифик/Фиджи Пасифик/ Гуам Пасифик/Мидуей Пасифик/Порт_Морсби САЩ/Аляска САЩ/Аризона САЩ/Централна САЩ/Източна САЩ/Източна Индиана САЩ/Хавай САЩ/Планински САЩ/Тихоокеански регион САЩ/Самоа

Искате ново име за уебсайта си? Предлага се от нас

Задаването на часовата зона (по подразбиране) е много необходимо за правилната обработка на данните. Тази статия, Задаване на часова зона в php.ini, ще ви помогне да научите как можете да зададете часовата зона в PHP конфигурационния файл (php.ini) или във всеки PHP скрипт за временно използване.

Задаване на часова зона в php.ini

За да зададете часовата зона по подразбиране за вашата PHP среда, следвайте тези 4 прости стъпки.

1. Трябва да се намери конфигурационен файл php.ini и това може да се направи:

# find / -type f -name php.ini

По подразбиране php.ini се намира в:

За CentOS, RedHat или Fedora ще има:

/etc/php.ini

За Ubuntu, Debian или LinuxMint ще има:

/etc/php5/apache2/php.ini

2. Следващата стъпка е да търсите часови зони (за вашето местоположение), за това трябва да посетите сайта и да намерите вашата зона за php:

3. Регистрирайте намерената зона във файла php.ini. Например ще взема моята зона – „Европа/Киев“. Отворете конфигурационния файл и направете промени:

[...] date.timezone = "Европа/Киев" [...]

ВНИМАНИЕ! Потърсете опцията "date.timezone" в този файл, може би този параметървече регистриран.
4. Рестартирайте уеб сървъра:

# услуга httpd рестартиране

# услуга apache2 рестартиране

Ако е друг сървър (nginx, tomcat, lighttpd), рестартирайте го.

Можете също да посочите този параметър в самия php файл, както следва:

Настройката на часова зона в php.ini е завършена.

Понякога възниква ситуация, че текущото време на сървъра не съответства на текущата ви часова зона или на часовата зона на региона, към който е насочен вашият сайт.

За да стане ясно, нека ви напомня: Русия е много голяма географски и не всеки има нужда сайтовете им да „живеят“ според московското време. Например Урал, Сибир, Далечния изток и др.

Сървърите на най-популярните руски хостинг доставчици се намират на технологични сайтове в Москва и Санкт Петербург и по подразбиране са конфигурирани, разбира се, за московската часова зона. Сървърът не може автоматично да се приспособи към вашето текущо местоположение и да коригира системния часовник. Следователно работата на функциите за дата и час на сайта може да не е напълно правилна. Естествено, сега не говорим за CMS, в който настройката на часовата зона обикновено присъства директно в администраторския интерфейс.

Първо проверете текущото състояние с помощта на PHP код:

ехо ini_get("date.timezone");

Добре е, ако имате собствен сървър и имате достъп до php.ini, където можете да зададете желаната часова зона и да я забравите. Например по този начин:

Date.timezone = Европа/Москва

Ако обаче сървърът хоства няколко проекта, които трябва да поддържат различни часови зони, тогава е по-добре да не правите това. В този случай би било по-правилно да задавате часови зони само за проекти със същата часова зона.

Задаване на часова зона на споделен хостинг

включено виртуален хостинг, най-често няма достъп до конфигурациите на сървъра.Ето защо, първо, опитайте да зададете часовата зона, като използвате .htaccess. Просто намерете или създайте файл .htaccess в корена на вашия сайт и добавете следния ред към него:

Php_value date.timezone "Европа/Москва"

Ако методът не работи, тогава ще използваме функцията date_default_timezone_set(), която задава часовата зона по подразбиране за всички функции за дата и час. За да направите това, просто трябва да добавите следния ред някъде в началото на скрипта:

Date_default_timezone_set("Европа/Москва");

естествено, Европа/Москвапромени в часовата зона, от която се нуждаете. За територията на Руската федерация PHP поддържа следните часови зони:

  • Европа/Москва
  • Европа/Самара
  • Европа/Калининград
  • Европа/Волгоград
  • Азия/Анадир
  • Азия/Камчатка
  • Азия/Красноярск
  • Азия/Магадан
  • Азия/Новокузнецк
  • Азия/Новосибирск
  • Азия/Омск
  • Азия/Сахалин
  • Азия/Владивосток
  • Азия/Якутск
  • Азия/Екатеринбург

Можете да видите списък с всички налични часови зони, като следвате връзката или изпълните команда, която ще ви върне списък с часови зони, налични на вашия сървър.

Print_r(DateTimeZone::listIdentifiers());