Изменить сегодняшнюю дату и время в php
Можно ли изменить текущую дату и время php (что-то вроде set_time (strtotime ('1999-09-09')), поэтому, когда я вызываю time(), он вернет мне timestamp за 1999-09-09? чтобы установить его глобально для всего приложения.
ИЗМЕНИТЬ
У меня уже есть одно старое приложение, и мне нужно настроить текущую дату.
Я не могу принимать какие-либо пользовательские функции. Представьте, что я должен просмотреть весь код и заменить каждый раз() вызов. Даже если я это сделаю, это не поможет, потому что есть такие функции, как getdate(), которые мне тоже нужно заменить.
Ответы
Ответ 1
Функции time()
фактически запрашивают системные часы на время, поэтому вам нужно будет обновить время системных часов сервера. Несколько вещей, которые нужно иметь в виду:
- Это делается по-разному на сервере Unix, чем на сервере Windows. Если вам нужен код, совместимый с обоими, вы должны быть осторожны.
- Иногда (особенно в ситуациях с общим хостингом) вам не разрешается изменять системное время.
- Изменения в системном времени останутся после выполнения script, если вы не измените его позже. Поэтому вы рискуете на самом деле завинчивать системные часы.
Если вы хотите изменить время в глобальном масштабе для всего приложения, я рекомендую иметь статическую переменную $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, согласно странице date
man, код будет выглядеть так:
shell_exec("date 0909hhmm1999"); // It says "date MMDDhhmiYYYY". I'm not sure how to set seconds, although I assume "mi" = "minutes"
Ответ 2
Вы также можете проверить модуль Timecop PHP, отлично работали в моем случае.
После его установки вы можете перемещаться вперед и назад во времени только с одной строкой кода.
Ответ 3
PHP не имеет даты и времени самостоятельно. time() возвращает текущую временную метку времени сервера. В зависимости от вашей операционной системы вполне возможно, что вы (то есть пользователь, который запускает ваш процесс script), фактически не могут изменять дату и время сервера.
Что задает другой вопрос: почему вы хотите это сделать?
Лучше было бы реализовать свою собственную функцию 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
- это метка времени, которую вы хотите использовать.
Ответ 4
Нет, это не так. 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();
Это то, что я быстро выбрал для вас. Я не тестировал его, поэтому могут быть (возможно,) ошибки, но я надеюсь, что он даст вам достаточно, чтобы получить решение.
Ответ 5
Вы также можете попробовать использовать глобальную переменную $_SERVER['REQUEST_TIME']
(доступную с PHP 5.1.0) и заменить ее на время выполнения.