Как получить локальное системное время в PHP?

Я пишу систему PHP, и мне нужно получить системное время. Не время GMT или время, характерное для часового пояса, но такое же системное время, которое используется системой CRON. У меня есть задача CRON, которая работает каждый день в полночь, и я хочу показать на веб-странице, сколько времени потребуется, прежде чем она снова запустится.

Например: прямо сейчас на мои системные часы работает 6 часов. Я запускаю код:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now")); 

Результатом, однако, является «3:00» вместо «6:00». Если я убегу

 date("H:i", strtotime("tomorrow")); 

Он возвращает 0:00, что является правильным. Но если я забегу

 date("H:i", strtotime("now")); 

Он возвращает 21:00, хотя правильное должно быть 18:00.

Благодарю.

time php вернет системное время. вы можете отформатировать его с date

если вы просто хотите отобразить время в местное время посетителя, возможно, вам лучше использовать небольшой javascript

Есть много ответов, однако на момент написания письма нет даже одного правильного ответа.

Функция PHP time() не возвращает системное время, как полагает большинство людей, но возвращает date.timezone время PHP, обычно устанавливаемое с помощью date.timezone в php.ini или заданное с помощью date_default_timezone_set() в скрипте.

Например, на одном из моих серверов время PHP было настроено на Europe/Rome и системное время до UTC . У меня была разница в часе между системным временем и временем PHP.

Я собираюсь дать вам решение, которое работает для Linux, я не знаю, для Windows. В Linux системный часовой пояс установлен в /etc/timezone . Теперь это обычно за пределами разрешенного параметра open_basedir , но вы можете добавить :/etc/timezone в свой список, чтобы читать файл.

Затем поверх скриптов, которые хотят получить системное время, вы можете вызвать библиотечную функцию, которая устанавливает часовой пояс сценария в системный часовой пояс. Я полагаю, что эта функция является частью класса, поэтому я использую static:

 static function setSystemTz() { $systemTz = trim(file_get_contents("/etc/timezone")); if ($systemTz == 'Etc/UTC') $systemTz = 'UTC'; date_default_timezone_set($systemTz); } 

Чтобы усугубить ситуацию в PHP 5.3.3 «Etc / UTC» не распознается, тогда как «UTC» есть, поэтому мне пришлось добавить if, чтобы исправить это.

Теперь вы можете счастливо называть time() и это действительно даст вам системное время. Я протестировал его, потому что мне это было нужно для себя, поэтому я нашел этот вопрос сейчас.

time()

даст вам текущую временную метку системы.

Руководство

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

Вы можете получить дату / время сервера, на котором работает PHP, используя функцию time() – она ​​вернет метку времени, соответствующую текущему времени.

Это системное время на этом сервере – то же, что используется cron.

Если вы хотите использовать GMT, вы можете использовать gmtstrftime() , что даст вам системное время, но как в GMT. Дополнительную информацию можно найти на странице http://us2.php.net/gmstrftime .

Если вы после форматированной даты:

 date ('d/m/yh:i:s'); 

будет делать трюк, нет необходимости передавать время () в дату, поскольку оно будет по умолчанию текущим системным временем, если второй параметр не указан.

Дополнительные параметры форматирования см. здесь: http://php.net/manual/en/function.date.php

В противном случае вы можете просто использовать

 time() 

Чтобы получить текущую временную метку unix, как упомянули другие.

Для получения текущего времени вашей системы вам нужно установить правильную date.timezone в файле php.ini. Например, если вы из Индии, тогда вы напишете:

 date.timezone = Asia/Calcutta 

Для Германии это будет:

 date.timezone = Europe/Berlin 

После этого date("Ymd H:i:s") даст ваше текущее время. Для получения часового пояса см. Список часовых поясов, поддерживаемых PHP .

Попробуй это:

 $time=date("h:i:s A", strtotime("now"-14)); echo $time; 

Вы можете отрегулировать время, изменив номер 14 выше.

Это самый простой и надежный способ сделать это:

 $sys_timestamp = strtotime(exec("date")); 

Давайте не будем пытаться подделывать его с помощью php, давайте просто получим реальное время sys;)

(Будет работать в любой системе на основе unix)

Вы можете указать текущее местное время через Javascript и установить его в любой переменной PHP, чем.

  <script> // For 24 hours var ct = new Date(); var hr = ct.getHours(); var mt = ct.getMinutes(); if (mt < 10) { mt = "0" + mt; } document.write("<b>" + hr + ":" + mt + " " + "</b>"); // For 12 hours (AM / PM) var ct = new Date(); var hr = ct.getHours(); var mt = ct.getMinutes(); var ampm = "AM"; if (hr >= 12) { ampm = "PM"; hr = hr - 12; } if (hr == 0) { hr = 12; } if (mt < 10) { mt = "0" + mt; } document.write("<b>" + hr + ":" + mt + " " + ampm + "</b>"); </script>