Установить время GMT + 8 PHP

У меня есть несколько скриптов php на хостинге, но время хостинга отличается от моего местного времени (GMT + 8). Как установить правильный скрипт time () на GMT + 8?

Когда я использую:

<?
echo time(); //it show me the hosting time;
?>

person Mando Madalin    schedule 12.11.2013    source источник
comment
вы можете сначала погуглить! stackoverflow.com/questions/5454779/   -  person Developerium    schedule 12.11.2013
comment
Поскольку time() возвращает метку времени UNIX, не зависящую от часового пояса, какой именно результат вы ожидаете и что получите?   -  person deceze♦    schedule 12.11.2013
comment
@deceze, я хочу это, я работаю с функцией time (), чтобы сделать отметки времени для какой-то новой записи, которую я должен добавить в таблицу. time () показывает время сервера хостинга. но я нахожусь в регионе GMT ​​+ 8, поэтому всякий раз, когда я использую time (), я хочу дать мне время GMT + 8   -  person Mando Madalin    schedule 12.11.2013
comment
Опять же, пожалуйста, докажите нам, насколько конкретно результат time() отличается от того, что вы ожидаете в конкретных терминах. Ваш вопрос расплывчатый, и вы должны доказать, что то, что работает для всех остальных, не работает для вас. Мой time() здесь в настоящее время дает мне 1384260111. Чего еще вы ожидаете и почему?   -  person deceze♦    schedule 12.11.2013
comment
@deceze я хочу, чтобы функция давала мне время в секундах (как функция time ()) для часового пояса Азии / Гонконга. есть ли способ получить часовой пояс Гонконга в секундах?   -  person Mando Madalin    schedule 12.11.2013
comment
facepalm Расскажите нам на конкретном примере значения, которое вы ожидаете, и какое значение вы получаете вместо этого! Метки времени UNIX не зависят от часовых поясов, поэтому время в секундах для Гонконга не имеет смысла!   -  person deceze♦    schedule 12.11.2013
comment
@deceze, какой еще конкретный пример вы хотите рассказать мне больше, чем то, что я хочу? time () - это эхо времени с эпохи, я хочу, чтобы функция отображала в секундах часовой пояс Гонконга. time () is echo me 1384259580 (12-11-2013 05:33) function_that_i_need () должен повторить мне секунды (12-11-2013 20:33) гонконгское время   -  person Mando Madalin    schedule 12.11.2013
comment
Так как бы выглядело это значение? Нигде нет стандарта, определяющего секунды гонконгского времени. Есть универсальный стандарт эпохи UNIX, но нет стандарта гонконгской эпохи. Поэтому, если вы хотите что-то подобное, вам нужно либо уточнить, как именно это должно выглядеть, либо, что более вероятно, вы неправильно понимаете, что такое эпоха UNIX и как ее использовать.   -  person deceze♦    schedule 12.11.2013
comment
@deceze посмотри, у меня есть скрипт, который вводит новые записи в db. Я использовал time (), чтобы указать дату вставки в секундах, потому что мне легче использовать после функции strtotime для поиска вводных записей с определенной даты. Есть ли способ сохранить гонконгское время в формате секунд, а затем использовать дату ('d-m-Y h: s', $ storedseconds), чтобы дать мне время для гонконга?   -  person Mando Madalin    schedule 12.11.2013
comment
То есть вы говорите, что дата отображается неправильно после прохождения эпохи через date()?! Тогда это совсем другая проблема.   -  person deceze♦    schedule 12.11.2013
comment
@MandoMadalin: Все, что вам нужно сделать, это установить часовой пояс с помощью date_default_timezone_set(), и вызов функции date() выведет правильное смещение.   -  person Glavić    schedule 12.11.2013
comment
Прочтите это: stackoverflow.com/a/4812178/476   -  person deceze♦    schedule 12.11.2013
comment
Спасибо, разобрался! очень трудно понять друг друга, но в конце концов я сделал это date_default_timezone_set('Asia/Hong_Kong'); $time = strtotime(date('c', time())); echo date('d-m-Y H:m:s',$time);   -  person Mando Madalin    schedule 12.11.2013
comment
@MandoMadalin: у вас уже было 3 часа назад, в которых говорится, что нужно использовать date_default_timezone_set(). Странно, что вы их не пробовали ....   -  person Glavić    schedule 12.11.2013


Ответы (5)


time() всегда будет возвращать количество секунд с начала эпохи. Приведенный ниже код напечатает одно и то же дважды.

date_default_timezone_set('Europe/London');
echo time();

date_default_timezone_set('America/Cuiaba');
echo time();

Концепция Unix Timestamp не несет информации о часовом поясе по своей задумке. Данная временная метка всегда одинакова независимо от часового пояса. (Количество секунд с 1970-01-01 00:00:00 UTC) Если вы хотите выразить метку времени с учетом часового пояса, вы скорректируете полученную дату со смещением текущего часового пояса.

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

date_default_timezone_set('Europe/London');
echo time();
echo date('c')

date_default_timezone_set('America/Cuiaba');
echo time();
echo date('c');

Выведет:

1384259474
2013-11-12T12:31:14+00:00
1384259474
2013-11-12T09:31:14-03:00
person marekful    schedule 12.11.2013
comment
Хорошо, а теперь, пожалуйста, помогите мне, как сделать так, чтобы каждый раз, когда я запускал функцию time (), показывалось время Азии / Гонконга в секундах? теперь имеет значение, где размещены скрипты - person Mando Madalin; 12.11.2013
comment
Вы не поняли, что я сказал. time НЕ будет учитывать часовой пояс. Вы должны использовать функцию date. Вы не хотите, чтобы time вел себя иначе. Вы можете произвести любые необходимые вычисления, а затем отобразить результат с информацией о часовом поясе. - person marekful; 12.11.2013
comment
Возможно, если бы вы могли подробно описать, чего именно вы пытаетесь достичь, я мог бы дать вам более подробное объяснение, почему вам не нужно time() учитывать часовой пояс. - person marekful; 12.11.2013
comment
Я хочу, чтобы функция давала мне время в секундах (как функция time ()) для часового пояса Азии / Гонконга. есть ли способ получить часовой пояс Гонконга в секундах? - person Mando Madalin; 12.11.2013
comment
Вы можете это сделать, но я говорю, что вам, скорее всего, не нужно. Хотели бы вы точно рассказать о проблеме, которую пытаетесь решить? - person marekful; 12.11.2013
comment
У меня есть база данных, в которой я сохраняю некоторые записи, всякий раз, когда я вставляю новую запись, я использую функцию time () для хранения сохраненной даты записи. time () - это эхо времени с эпохи, я хочу, чтобы функция отображала в секундах часовой пояс Гонконга. time () is echo me 1384259580 (12-11-2013 05:33) function_that_i_need () должен повторить мне секунды (12-11-2013 20:33) гонконгское время - person Mando Madalin; 12.11.2013
comment
В этом случае то, что может быть важным для вас, - это настройка часового пояса сервера базы данных, но не обязательно. Попробуйте подумать об этом так: предположим, что сервер базы данных находится в UTC. Когда запись создается в базе данных, вы просто используете PHP time() или даже MySQL NOW(). Это сохранится в формате UTC. Теперь, когда вы читаете дату создания записи, она отображается в формате UTC, но вы можете отображать ее в любом часовом поясе, который вам просто необходим. - person marekful; 12.11.2013
comment
Попробуйте ответить себе на вопрос: почему важно хранить время создания в GMT + 8? (Это не так. Как я сказал выше, timestamp не заботится о часовых поясах). Часовые пояса играют роль при представлении метки времени в удобочитаемом формате. - person marekful; 12.11.2013
comment
Приятно это слышать, но я не знаю, как отобразить это в нужное время. я использую это сейчас эхо-дату ('d-m-Y h: s', $ mystoredseconds); как я могу сделать это, чтобы показать гонконгское время? Спасибо - person Mando Madalin; 12.11.2013
comment
Итак, если вы хотите отобразить сохраненные секунды (сохраненные в UTC), вы можете сделать: date('c', $mystoredseconds). Это будет отображаться в часовом поясе системы. Используйте date_default_timezone_set() в своем PHP-коде, чтобы изменить часовой пояс PHP, тогда, когда вы повторите date('c', $mystoredseconds), он напечатает дату в другом часовом поясе. - person marekful; 12.11.2013
comment
Спасибо, разобрался! очень трудно понять друг друга, но в конце концов я сделал это date_default_timezone_set('Asia/Hong_Kong'); $time = strtotime(date('c', time())); echo date('d-m-Y H:m:s',$time); - person Mando Madalin; 12.11.2013

Ваше предположение неверно:

int time ( void )

Возвращает текущее время в секундах, прошедшее с начала эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу).

Эпоха Unix - это фиксированный момент времени. Если вы действительно получаете недопустимую метку времени, ваш хостинг-провайдер не позаботился о настройке часов сервера.

Если вы хотите правильно обрабатывать дату с учетом часового пояса, я предлагаю вам узнать о DateTime класс и друзья и:

  1. Используйте именованные часовые пояса (Europe/Madrid) вместо смещения UTC (+01:00), поскольку они учитывают летнее время.

  2. Установите часовой пояс вашего приложения по умолчанию, чтобы вам не приходилось указывать его каждый раз:

    date_default_timezone_set("Europe/Helsinki"); 
    
  3. Никогда не выполняйте математику даты самостоятельно (например, не добавляйте вручную 86400 секунд, чтобы увеличить день).

person Álvaro González    schedule 12.11.2013
comment
Я очень сомневаюсь, что это как-то связано с неустановленными часами сервера. OP четко заявил, что он пытается отображать время только в GMT + 8 (которое отличается от времени, которое использует хостинг-провайдер). - person Charlie74; 12.11.2013
comment
@ Charlie74 - На самом деле он не говорит, что хочет делать. Он говорит, что результат echo time() неверен, во что, очевидно, трудно поверить. - person Álvaro González; 12.11.2013
comment
@ Charlie74 вывод времени в порядке, но я хочу, чтобы функция давала мне время в секундах (как функция time ()) для часового пояса Азии / Гонконга. есть ли способ получить часовой пояс Гонконга в секундах? - person Mando Madalin; 12.11.2013
comment
@MandoMadalin - На данный момент, учитывая все ответы, которые у вас есть до сих пор, мне интересно, действительно ли это вопрос относительности, и вы хотите принять во внимание количество наносекунд, которое ваш сервер и город Хонг- Конг сместились с 1970 года из-за другого вращения Земли. С сожалением сообщаю, что для обработки временных меток PHP используются целые числа, поэтому разрешение составляет 1 секунду. - person Álvaro González; 12.11.2013

Вы должны установить местное время в php

функция date_default_timezone_set

Список поддерживаемых часовых поясов

Пример:

date_default_timezone_set("America/Fortaleza"); 
echo time(); // Local Time in America/Fortaleza
person juniorb2s    schedule 12.11.2013

Добавьте 28800 (8 часов в секундах) к выходному значению time ()

<?php echo (time()+28800); ?>

Я не уверен, но time () возвращает метку времени, которая эквивалентна GMT, поэтому добавление метки времени 8 часов даст вам GMT + 8. Точно так же вы можете даже вычесть время

person Adi    schedule 12.11.2013

Вы можете использовать функцию date_default_timezone_set (), например

date_default_timezone_set('Asia/Dhaka');
person Zahidul Hossein Ripon    schedule 12.11.2013
comment
time() всегда будет возвращать количество секунд с начала эпохи без настройки часового пояса. - person marekful; 12.11.2013