Dater - визначає часовий пояс, локалізує і форматує час в PHP. Установка временнОй зони в PHP Змінити часовий пояс php

Dater - визначає часовий пояс, локалізує і форматує час в PHP. Установка временнОй зони в PHP Змінити часовий пояс php

date_default_timezone_set utc (6)

new PDO ( "mysql: host \u003d localhost; dbname \u003d nametable", "username", "password",);

Ці дати необхідно порівняти в MySQL за допомогою функції NOW () щоб повернути різницю в годиннику, наприклад:

SELECT TIMESTAMPDIFF (hour, NOW (), finalize_at) FROM plans;

Але проблема в тому, що дата дати функції PHP date ( "Ymd H: i: s") використовує налаштування часового поясу PHP, а функція NOW () займає час MySQL з сервера MySQL.

Я намагаюся вирішити це:

  1. date_default_timezone_set ( "Europe / Paris"); Він працює тільки для PHP.
  2. date.timezone \u003d "Europe / Paris"; Він працює тільки для PHP.
  3. SELECT CONVERT_TZ (now (), "GMT", "MET"); Це повертає порожнє.
  4. mysql\u003e SET time_zone \u003d "Europe / Paris"; Це видає помилку з консолі MySQL.

І часовий пояс для MySQL не змінюється.

Чи є спосіб змінити часовий пояс для PHP і MySQL без необхідності робити це з консолі MySQL або встановити зміна часового поясу десь в php.ini і зробити ці значення доступними як для PHP, так і для MySQL.

Дуже ціную вашу підтримку.

Ви можете зробити це легко тільки двома рядками PHP.

$ Tz \u003d (new DateTime ( "now", new DateTimeZone ( "Asia / Kabul"))) -\u003e format ( "P"); $ Pdo -\u003e exec ( "SET time_zone \u003d" $ tz ";");

Для PHP використовуйте цю функцію:

date_default_timezone_set () default - timezone \u003d "timezone"

Якщо у вас є привілей root , Ви можете встановити значення глобального годинного сервера під час виконання з допомогою цього оператора:

SET GLOBAL time_zone \u003d timezone;

Часовий пояс за з'єднання. Кожен клієнт, який підключається, має свій власний часовий пояс, заданий time_zone variable. Спочатку змінна сеансу приймає своє значення з global time_zone змінної global time_zone, але клієнт може змінити свій власний часовий пояс за допомогою цього оператора:

SET time_zone \u003d timezone;

Кращий метод Встановіть часовий пояс в PDO MySQL:

При необхідності, помилково ви можете використовувати: date ( "P") Приклад:

new PDO ( "Mysql: host \u003d localhost; dbname \u003d nametable", "Username", "password", [PDO :: MYSQL_ATTR_INIT_COMMAND \u003d\u003e "SET NAMES utf8; SET time_zone \u003d" ". date ( "P"). "" "]);

Я можу змінити свій часовий пояс mysql за замовчуванням з розділу змінних, відредагувавши рядок, яка говорить «часовий пояс» в phpmyadmin.

Тут ви також можете змінити формат і багато іншого, яке ви можете знайти в підтримці mysql http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html, я сподіваюся, що він вам допоможе .

$ Unsafe_variable \u003d (is_numeric ($ _ POST [ "user_input"])? $ _POST [ "user_input"]: "");

І набагато краще використовувати ці функції для перевірки вхідних даних mysql_real_escape_string.

Іноді виникає така ситуація, що поточний час на сервері не відповідає вашому часовому поясу або часовому поясу регіону, на який орієнтований ваш сайт.

Щоб було зрозуміло, нагадаю: територіально Росія дуже велика, і далеко не всім потрібно, щоб їх сайти «жили» за московським часом. Наприклад, Урал, Сибір, Далекий Схід і т.д.

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

В першу чергу перевірте поточний стан за допомогою PHP-коду:

echo ini_get ( "date.timezone");

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

Date.timezone \u003d Europe / Moscow

Правда, якщо на сервері розміщені кілька проектів, в яких повинні підтримуватися різні часові пояси, тоді краще цього не робити. У цьому випадку буде правильніше поставити тимчасові зони тільки для проектів, де один часовий пояс.

Установка часового поясу на віртуальному хостингу

На віртуальному хостингу, доступу до конфігам сервера найчастіше немає. Тому, в першу чергу спробуйте задати тимчасову зону за допомогою .htaccess. Просто знайдіть або створіть в корені свого сайту файл.htaccess і додайте в нього такий рядок:

Php_value date.timezone "Europe / Moscow"

Якщо спосіб не спрацює, тоді скористаємося функцією date_default_timezone_set (), яка встановлює тимчасову зону по-замовчуванню для всіх функцій дати і часу. Для цього потрібно десь на початку скрипта просто додайте такий рядок:

Date_default_timezone_set ( "Europe / Moscow");

природно, Europe / Moscow змінюється на необхідний вам часовий пояс. Для території РФ в PHP підтримуються наступні тимчасові зони:

  • Europe / Moscow
  • Europe / Samara
  • Europe / Kaliningrad
  • Europe / Volgograd
  • Asia / Anadyr
  • Asia / Kamchatka
  • Asia / Krasnoyarsk
  • Asia / Magadan
  • Asia / Novokuznetsk
  • Asia / Novosibirsk
  • Asia / Omsk
  • Asia / Sakhalin
  • Asia / Vladivostok
  • Asia / Yakutsk
  • Asia / Yekaterinburg

Зі списком усіх доступних тимчасових зон можна ознайомитися за посиланням або виконати команду, яка поверне вам список тимчасових зон, доступних на вашому сервері.

Print_r (DateTimeZone :: listIdentifiers ());


Це невелика стаття про те, як працювати з тимчасовими зонами при зберіганні значень дати / часу в базі даних. Бази даних або мова програмування, який ви вирішите використовувати, вирішального значення не має, так як описувані в статті явища універсальні. Свої дії я буду показувати на прикладі використання зв'язки MySQL і PHP. Проблема, пов'язана з тимчасовими зонами, досить банальна. Багато часто забувають про їх існування, а деякі вважають їх чимось надмірно складним. Зазвичай при налаштуванні бази даних або при користуванні послугами веб-хостингу ваші тимчасові зони налаштовані за замовчуванням. Налаштування за замовчуванням підійдуть, якщо ви працюєте з одним сервером, але що станеться, якщо ви вирішите перемістити його?

Те ж питання закономірний, якщо у вас кілька серверів в різних місцях.
Замість того щоб зберігати тимчасові зони із зазначенням кожної дати, краще взяти за основу стандартний час і зв'язати всі ваші дати з ним. Такий спосіб дозволяє зробити перехід на стандартний час до того, як значення буде збережено в базі даних. Взагалі, хороша ідея - просто використовувати UTC +00: 00.

Що таке UTC

Формат UTC розшифровується як «Всесвітньо координований час» і є наступником «Середнього часу за Гринвічем» (GMT). Ці два формати практично ідентичні, але UTC вважається прийнятим стандартом. Загалом, UTC ґрунтується на виділенні 40 різних часових зон. За точку відліку в UTC прийнято брати 00:00 годин. Разом виходить 12 основних тимчасових зон, як з позитивним, так і з негативним значенням, а також деякі додаткові тимчасові зони, на зразок півгодинних UTC +04: 30. Ідея полягає в тому, що якщо у вас є тимчасова зона UTC -05: 00, То вам доведеться відняти 5 годин від початкового UTC +00: 00, Щоб домогтися потрібного відповідності. Тобто, якщо це 14:00 (або 2 години вечора) а ваша тимчасова зона UTC-05: 00 (EST або Східний часовий пояс), то UTC +00: 00дорівнюватиме 19:00 (або 7 години вечора).
  • Графічне представлення світових тимчасових зон (Wikipedia)
  • Список скорочень тимчасових зон (Wikipedia)

Зберігання часу в форматі UTC +00: 00

Перше, що ми повинні зробити, - визначитися, яку тимчасову зону використовувати для зберігання всіх наших значень. Я настійно рекомендую взяти за основу UTC +00: 00 - без особливої \u200b\u200bпричини, крім як тієї, що її легко запам'ятати і 0 являє собою ідеальну точку відліку. Так як ми знаємо, що всі дати вказані в UTC +00: 00, Стає набагато легше представляти належний час для кожного користувача на основі їх особистих тимчасових зон. Після того як користувач вибрав (або у нас є автоопределение) свій часовий пояс, висновок відповідного часу для цього користувача стає звичайною справою.

Установка часового поясу за умовчанням

Вважаючи, що всі наші дати / час зберігаються в форматі UTC, ми можемо просто встановити за замовчуванням тимчасову зону, яка буде використовуватися для відображення кожного часу. Це дозволить автоматично підібрати дату і час для конкретного користувача. У PHP все, що нам потрібно зробити, - це встановити тимчасову зону, наприклад, так:
date_default_timezone_set ( "EST");
Ми можемо зробити це в якомусь блоці ініціалізації на початку нашого коду - і все готово: всі дати будуть відображатися належним чином для того часового поясу, в якому знаходиться користувач.

Якщо ми хочемо отримати повний контроль над датою і часом, ми можемо побудувати функцію наступним чином:
function get_date ($ date) (date_default_timezone_set ( "EST"); $ date \u003d date ( "Y-m-d H: i: s", strtotime ($ date)); date_default_timezone_set ( "UTC"); return $ date;)

Налаштування PHP під UTC +00: 00

Звичайно, все було б не так просто, якби ми не налаштували нашу систему під UTC, як тимчасову зону за замовчуванням. Я впевнений, що це може бути зроблено приблизно однаково і в інших мовах, але PHP це робиться в такий спосіб:
date.timezone \u003d UTC
Тепер щоразу, коли ми використовуємо такі речі, як, наприклад, функцію time (), Це автоматично дає нам час в форматі 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. Проте, якщо ми хочемо використовувати TIMESTAMP, Яка зазвичай самообновляющиеся, або таку функцію дати з MySQL, як NOW (), То ми повинні налаштувати MySQL для використання UTC як тимчасовий зони за замовчуванням.

В MySQL це робиться шляхом установки UTC зміщення, яке може бути зроблено так само легко, як це було в PHP, шляхом внесення наступних змін:
default-time-zone \u003d "+00: 00"

Оновлення існуючих дат / часу

Якщо ви вирішили стандартизувати тимчасові зони за допомогою UTC, де тимчасової зоною за замовчуванням є UTC +00: 00 зміщення, то тепер ваш поточний час у вашій базі даних буде непрацездатною.

На щастя, MySQL надає зручну функцію, яка дає нам можливість легко оновлювати існуючі часові пояси.

ПРИМІТКА: Якщо у вас є які-небудь тимчасові мітки, то їх потрібно оновити в першу чергу.

Ми можемо здійснювати пошук по всіх полях дати і часу в нашій базі за допомогою наступного запиту:
SELECT * FROM `information_schema`.`COLUMNS` WHERE` TABLE_SCHEMA` \u003d "table_name" AND ( `DATA_TYPE` \u003d" timestamp "OR` DATA_TYPE` \u003d "datetime" OR `DATA_TYPE` \u003d" date ");
Звідси ми можемо виконати такий запит, щоб оновити дати / час в наших таблицях:
UPDATE `table_name` SET` timestamp` \u003d CONVERT_TZ ( `timestamp`," -05: 00 "," +00: 00 ");
де -05:00 - поточна тимчасова зона, в форматі якої зберігається час (вона як і в попередньому випадку відноситься до Східної). Часовий пояс +00:00 , В яку ми хочемо перетворити, в даному випадку відноситься до UTC.

Якщо ви помітили, що час на вашому сайті не збігається з вашим часовим поясом і ви хотіли б його поправити, то для цього існує кілька способів. Більшість віртуальних хостингів забороняє редагування цього файлу, але не впадайте у відчай, досягти того ж результату можна внісши деякі зміни в файл.htaccess. У цьому посібнику ви дізнаєтеся, як змінити часовий пояс вашого сайту.

Перед тим, як ви почнете це керівництво, вам знадобиться наступне:

  • Доступ до панелі управління хостингом або FTP

Крок 1 - Пошук і редагування файла.htaccess

файл .htaccess знаходиться в каталозі public_html. Ви можете відкрити його за допомогою файлового Менеджера у вашій панелі управління хостингом або підключившись до вашого облікового запису через FTP-клієнт (наприклад, FileZilla). Дані керівництва детально розповідають про обох способах:

Крок 2 - Пошук правильного часового поясу

Список всіх підтримуваних часових поясів може бути знайдений на цьому сайті.

По-перше, виберіть свій регіон.

Тепер виберіть часовий пояс, який ви хочете використовувати. У нашому випадку, ми виберемо Europe / Moscow.

Крок 3 - Налаштування часового поясу через.htaccess

Після того, як ви дізнаєтеся формат вашого часового поясу, відкрийте файл .htaccess. Після цього, додайте наступний код в самий верх файлу .htaccess:

Php_value date.timezone "Europe / Moscow"

ВАЖЛИВО! Замість Europe / Moscow впишіть потрібний вам часовий пояс.

Вітаємо, ви успішно змінили часовий пояс вашого сайту!

висновок

Це коротке керівництво розповіло вам про те, як змінити часовий пояс на сайті через.htaccess. Тепер вам не потрібно турбуватися про неправильному часу на вашому сайті.

 

 

Це цікаво: