PHP дата функция не принимает изменение часового пояса - PullRequest
0 голосов
/ 22 мая 2010

Я настроил небольшой тест для понимания и отладки часовых поясов между MySQL и PHP.

Вот эта страница: http://dev.feedingo.com/test_dates.php

Даты создаются в mySQL с помощью NOW () в поле datetime. Первоначальная проблема, которую я пытался выяснить, состоит в том, какой часовой пояс использует mySQL и как его синхронизировать с PHP. Но теперь есть еще более странная проблема.

В моем тестовом приложении, если вы измените свой часовой пояс, первое strtotime обновится правильно, но если вы передадите его в функцию date (), она не изменится. Вот как я устанавливаю часовой пояс на основе поля выбора.

    $current_timezone = 'America/New_York';
if( isset( $_GET['timezone'] ) ) $current_timezone = $_GET['timezone'];

date_default_timezone_set($current_timezone);

Есть идеи, почему функция date () не принимает изменения часового пояса? Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2013

Попробуй это.Это работа для меня.

<?php
$time=39600;
$datetime = strtotime(date("h:i:s A"))+$time;
$datetime = date('D, d M', $datetime);
echo $datetime;

// $time obtained from table below:
//  -25200|International Date Line (West) GMT-12|
//  -21600|Midway Island, Samoa GMT-11|
//  -18000|Hawaii, Honolulu GMT-10|
//  -14400|Alaska GMT-9|
//  -10800|Pacific Standard Time, US, Canada GMT-8|
//  -7200|British Columbia N.E., Santa Fe, Mountain Time GMT-7|
//  -3600|Central America, Chicago, Guatamala, Mexico City GMT-6|
//  0|US, Canada, Bogota, Boston, New York GMT-5|
//  +3600|Canada, Santiago, Atlantic Standard Time GMT-4|
//  +7200|Brazilia, Buenos Aires, Georgetown, Greenland GMT-3|
//  +10800|Mid-Atlantic GMT-2|
//  +14400|Azores, Cape Verde Is., Western Africa Time GMT-1|
//  +18000|London, Iceland, Ireland, Morocco, Portugal GMT|
//  +21600|Amsterdam, Berlin, Bern, Madrid, Paris, Rome, GMT+1|
//  +25200|Athens, Cairo, Cape Town, Finland, Greece, Israel GMT+2|
//  +28800|Ankara, Aden, Baghdad, Beruit, Kuwait, Moscow GMT+3|
//  +32400|Abu Dhabi, Baku, Kabul, Tehran, Tbilisi, Volgograd GMT+4|
//  +36000|Calcutta, Colombo, Islamabad, Madras, New Dehli GMT+5|
//  +39600|Almaty, Dhakar, Kathmandu, Colombo, Sri Lanka GMT+6|
//  +43200|Bangkok, Hanoi, Jakarta, Phnom Penh, Australia GMT+7|
//  +46800|Taipei, Beijing, Hong Kong, Singapore, GMT+8|
//  +50400|Seoul, Tokyo, Central Australia GMT+9|
//  +54000|Brisbane, Canberra, Guam, Melbourne, Sydney, GMT+10|
//  +57600|Magadan, New Caledonia, Solomon Is. GMT+11|
//  +61200|Auckland, Fiji, Kamchatka, Marshall, Wellington, GMT+12|
?>
0 голосов
/ 23 мая 2010

Функция date () работает правильно.

часовой пояс по умолчанию также влияет на strtotime.

Обратите внимание, что при изменении часового пояса единственным столбцом в вашей таблице, который изменяется, является столбец отметки времени.

Вам необходимо определить (или установить) часовой пояс, в котором работает mysql. Iрекомендовал бы UTC.

Затем попробуйте выполнить одно из следующих действий:

  1. Когда вы извлекаете дату из mysql, либо date_default_timezone_set ('UTC') перед вызовом strtotime (), а затем установитевернуться к предпочтению пользователя перед вызовом даты
  2. Попробуйте добавить часть часового пояса в строку даты, которую вы возвращаете из mysql:

    //, так как мы добавили часть часового поясаэто будет 20:14:01 в UTC.$ actualTime = strtotime ($ strDate);

Вот небольшой демонстрационный скрипт, который может помочь объяснить:

<?PHP
date_default_timezone_set('America/New_York');
$date = '2010-05-22 20:14:01'; //assume it's from mySQL, which is operating in UTC

echo strtotime($date) . ' ' . date('H:i:s', strtotime($date));
echo "\n";
echo strtotime($date.' -0000') . ' ' . date('H:i:s', strtotime($date . ' -0000'));
echo "\n";

Вывод выглядит так:

1274573641 20:14:01
1274559241 16:14:01

В первой строке указано strtotime, работающее в Америке / New_York (поскольку это значение по умолчанию).

Во второй строке задан явный часовой пояс на входе strtotime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...