Изменение сегодняшней даты и времени в php

Возможно ли изменить текущую дату и время php (что-то вроде set_time (strtotime ('1999-09-09')), поэтому, когда я вызываю time (), он вернет мне timestamp для 1999-09-09? Мне нужно установить его глобально для всего приложения.

РЕДАКТИРОВАТЬ

У меня уже есть одно старое приложение, и мне нужно настроить текущую дату. Я не могу принимать какие-либо пользовательские функции. Представьте, что я должен просмотреть весь код и заменить каждый раз () вызов. Даже если я это сделаю, это не поможет, потому что есть такие функции, как getdate (), которые мне тоже нужно заменить.

Функции time() фактически запрашивают системные часы на время, поэтому вам нужно будет обновить время системных часов сервера. Следует иметь в виду несколько вещей:

  • Это делается по-разному на сервере Unix, чем на сервере Windows. Если вам нужен код, совместимый с обоими, вы должны быть осторожны
  • Иногда (особенно в ситуациях с общим хостингом) вам не разрешается изменять системное время
  • Изменения в системном времени останутся после выполнения скрипта, если вы не измените его позже. Поэтому вы рискуете на самом деле завинчивать системные часы.

Если вы хотите изменить время в глобальном масштабе для всего приложения, я рекомендую иметь статическую переменную $timeOffset и создать свою собственную функцию time() следующим образом:

 function myTime(){ global $timeOffset; return time()+$timeOffset; } 

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

В Windows код будет выглядеть так:

 shell_exec("date 09-09-99"); // Use "date mm-dd-yy" or "time hh:mm:ss", respectively 

В UNIX, согласно man-странице date , код будет выглядеть так:

 shell_exec("date 0909hhmm1999"); // It says "date MMDDhhmiYYYY". I'm not sure how to set seconds, although I assume "mi" = "minutes" 

Вы также можете проверить модуль Timecop PHP , отлично работали в моем случае.

После его установки вы можете перемещаться назад и вперед во времени только с одной строкой кода.

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

Что задает другой вопрос: почему вы хотите это сделать?

Лучше было бы реализовать свою собственную функцию time ():

 class myTime { private static $offset = 0; public static function getTime() { return time() + self::$offset; } public static function setTime($time) { self::$offset = $time - time(); } } 

И затем, везде, где вы используете time() , используйте myTime::getTime(); , Чтобы установить время, используйте myTime::setTime($time) где $time – метка времени, которую вы хотите использовать.

Нет, это не так. PHP получает свое время от системного времени. Единственный способ изменить то, что видит PHP, – это время, чтобы изменить системное время.

Для вас может быть возможно сделать это с помощью exec() или чего-то подобного, но, вероятно, не рекомендуется.

Лучшим решением может быть создание вашей собственной функции времени, которую вы можете указать, используя смещение.

например:

 function mytime() { return time()+set_mytime(); } function set_mytime($new_time=null) { static $offset; if(!$new_time) {return $offset;} //$new_time should be a unix timestamp as generated by time(), mktime() or strtotime(), etc $real_time=time(); $offset=$real_time-$new_time; } //usage: set_mytime(strtotime("1999-09-09"); $faketime=mytime(); .... do something that takes a bit of time .... $faketime2=mytime(); 

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

Вы также можете попытаться использовать глобальную переменную $_SERVER['REQUEST_TIME'] (доступную с PHP 5.1.0) и заменить ее на время выполнения.