Лучшее время по Гринвичу от пользователя | PHP - PullRequest
1 голос
/ 27 августа 2010

Мне было интересно, как сделать лучшую пользовательскую конфигурацию, когда пользователь устанавливает свое собственное время по Гринвичу, например если пользователь был в часовом поясе GMT ​​+ 3, и пользователь устанавливает его через UCP.

Что я сделал, так это каждый параметр в раскрывающемся меню:

<select name="timezone">
    ...
    <option value="-7200">GMT-2</option>
    <option value="-3600">GMT-1</option>
    <option value="0">GMT</option>
    <option value="3600">GMT+1</option>
    <option value="7200">GMT+2</option>
    ...
</select>

Таким образом, и когда пользователь выбирает его, он добавит значение в свое поле пользователя в базе данных.

Я застрял в том, что когда пользователь создал сообщение, оно использует штамп time (), а я использую функцию gmdate ():

while(loop goes here)
{
    $post_time = $row['post_time'] // e.g. 1282165261

    if($row['user_timezone'] > 0)
    {
        $timezone = $post_time-$row['user_timezone'];
    }
    else
    {
        $timezone = $post_time+$row['user_timezone'];
    }
}

Который выводится с этим форматом отметки времени:

gmdate("D jS M Y @ g:iA", $timezone);

Но проблема в том, что если я использую что-то ниже GMT, например GMT-1, GMT-6, меняется на +

Вопрос в том, как лучше всего настроить временные метки для предпочитаемого пользователем времени по Гринвичу?

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Это бессмысленно.

Вы не должны позволять пользователю выбирать смещение по Гринвичу, иначе:

  • Ему придется менять его при каждом переходе на летнее время.
  • Когда он в летнее время, он будет видеть неправильные времена для своего часового пояса для времен, которые произошли вне летнего времени и наоборот.

Что вам нужно сделать, это позволить ему выбрать фактический часовой пояс (например, Europe/Lisbon) из списка.

2 голосов
/ 27 августа 2010

Проблема в следующем:

if($row['user_timezone'] > 0)
{
    $timezone = $post_time-$row['user_timezone'];
}
else
{
    $timezone = $post_time+$row['user_timezone'];
}

Если вы внимательно посмотрите на это, вы увидите, что оно эквивалентно:

$timezone = $post_time - abs($row['user_timezone']);

Вам просто нужно заменить егос:

$timezone = $post_time - $row['user_timezone'];
...