NexxDigital - компьютеры и операционные системы

пояса автоматическое (6)

Мне нужно знать, в какой часовом поясе находятся мои пользователи, на основе их IP или HTTP-заголовка.

Я получил много ответов на этот вопрос, но я не мог понять ответ. Некоторые говорят, что использование -new Date().getTimezoneOffset()/60 (). Но что это значит?

У меня есть date_default_timezone_set("Asia/Calcutta"); в корне моей страницы (index.php). Поэтому для этого я должен динамически установить часовой пояс и установить его вместо Asia/Calcutta .

Answers

Информация о часовом поясе браузера не является частью спецификации HTTP, поэтому вы не можете просто получить ее из заголовка.

Если у вас есть координаты местоположения (например, с мобильного устройства GPS), вы можете найти часовой пояс, используя один из этих методов. Однако геолокация по IP-адресу не является отличным решением, поскольку часто IP-адрес провайдера или прокси-сервера, который может находиться в другом часовом поясе.

Существуют некоторые стратегии, которые вы можете использовать, чтобы попытаться определить часовой пояс, например, используя библиотеку jsTimeZoneDetect , которая является отличной отправной точкой, но недостаточно несовершенна, что вы не можете просто полагаться только на нее. Если вы используете moment.js, в момент-времени есть встроенная функция, называемая moment.tz.guess() которая делает то же самое.

Идея использования функции getTimezoneOffset() JavaScript ошибочна в том, что вы не получаете часовой пояс - только одно смещение для определенной даты. См. Раздел wiki темы тегов TimeZone под названием «TimeZone! = Offset».

Однако вы смотрите на это, в конечном счете, вам нужно решить один из двух подходов:

  • Попросите пользователя рассказать вам о своем часовом поясе, из какого-либо раскрывающегося списка или управления тайм-зонами на основе карт .
  • Отправляйте время только браузеру в UTC и используйте JavaScript в браузере для преобразования в любой локальный часовой пояс, к которому пользователь может установить свой компьютер.

Я обсуждаю это более подробно (с точки зрения AC #) в этом ответе.

Часовой пояс недоступен в заголовке HTTP, но страна (аббревиатура) находится в заголовке ACCEPT_LANGUAGE. Это будет нечто вроде «en-US» (США - код страны). Это можно комбинировать с информацией JavaScript, чтобы получить представление о часовом поясе пользователя.

Это то, что я использую в JS:

Function timezone() { var now = new Date(); var jano = new Date(now.getFullYear(), 0, 1).getTimezoneOffset()/-60; var julo = new Date(now.getFullYear(), 6, 1).getTimezoneOffset()/-60; var tz = Math.min(jano, julo); if (jano != julo) tz += ((jano < julo) ? "S" : "W") + Math.abs(jano - julo); return tz; }

Это возвращает строку типа «-6S1» для центральной зоны (стандартное смещение по времени на -6 часов, летнее время действует летом и добавляет 1 час). Я использую cookie, чтобы сделать это доступным для PHP. PHP ищет базу данных TZ для зон, которые соответствуют этому, и страны. Для здесь (US, -6S1) существует 7 соответствующих зон, первая - «Америка / Чикаго».

Кстати, в базе данных есть две зоны, где DST добавляет что-то, кроме 1 часа: лорд-Хоу-Айленд (10.5W0.5) и Тролль-станция, Антарктида (0W2).

Одно из них - спросить их! Особенно в тех системах членов, где вы можете захватить / зарегистрировать пользователя - дать им выбор в этот момент. Простой, но точный.

Это прекрасно работает...

Echo

Эти даты необходимо сравнить в MySQL с помощью функции NOW() чтобы вернуть разницу в часах, например:

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

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

Я пытаюсь решить это:

  • date_default_timezone_set("Europe/Paris"); Он работает только для PHP.
  • date.timezone= "Europe/Paris"; Он работает только для PHP.
  • SELECT CONVERT_TZ(now(), "GMT", "MET"); Это возвращает пустое.
  • mysql> SET time_zone = "Europe/Paris"; Это выдает ошибку из консоли MySQL.
  • И часовой пояс для MySQL не меняется.

    Есть ли способ изменить часовой пояс для PHP и MySQL без необходимости делать это с консоли MySQL или установить изменение часового пояса где-то в php.ini и сделать эти значения доступными как для PHP, так и для MySQL.

    Очень ценю вашу поддержку.

    Вы можете сделать это легко только двумя строками PHP.

    $tz = (new DateTime ("now" , new DateTimeZone ("Asia/Kabul" )))-> format ("P" ); $pdo -> exec ("SET time_zone="$tz";" );

    Для PHP используйте эту функцию:

    date_default_timezone_set () default - time - zone = "timezone"

    Если у вас есть привилегия root , вы можете установить значение глобального часового сервера во время выполнения с помощью этого оператора:

    SET GLOBAL time_zone = timezone ;

    Часовой пояс за соединение. Каждый клиент, который подключается, имеет свой собственный часовой пояс, заданный time_zone variable . Первоначально переменная сеанса принимает свое значение из global time_zone переменной global time_zone , но клиент может изменить свой собственный часовой пояс с помощью этого оператора:

    SET time_zone = timezone ;

    Лучший метод Установите часовой пояс в PDO MySQL:

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

    new PDO ("mysql:host=localhost;dbname=nametable" , "username" , "password" , [ PDO :: MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8;SET time_zone = "" . date ("P" ). """ ]);

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

    Здесь вы также можете изменить формат и многое другое, которое вы можете найти в поддержке mysql http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html , я надеюсь, что он вам поможет.

    $unsafe_variable = (is_numeric($_POST["user_input"]) ? $_POST["user_input"] : "");

    И гораздо лучше использовать эти функции для проверки входных данных mysql_real_escape_string .

    Настройка часового пояса (по умолчанию) очень необходим для правильной обработки данных. Эта статья «Настройка Timezone в php.ini» поможет вам узнать, как можно настроить часовой пояс в файле конфигурации PHP (php.ini) или внутри любого PHP-скрипта для временного использования.

    Настройка Timezone в 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. Для примера, я возьму свою зону — ‘Europe/Kiev’. Открываем конфигурационный файл и делаем изменения:

    [...] date.timezone = "Europe/Kiev" [...]

    ВНИМАНИЕ! Поищите опцию «date.timezone» в данном файле, возможно данный параметр уже прописан.
    4. Перезапускаем веб-сервер:

    # service httpd restart

    # service apache2 restart

    Если другой сервер (nginx, tomcat, lighttpd), то перезапустите его.

    Так же, можно прописать данный параметр в самом php файле следующим образом:

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



    Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
    ПОДЕЛИТЬСЯ:
    NexxDigital - компьютеры и операционные системы