Как я могу сместить системное время, чтобы проверить мою функцию PHP? - PullRequest
0 голосов
/ 30 марта 2009

Я пишу функцию, которая работает вне зависимости от того, будет ли время между 9 утра и 5 вечера в рабочий день. Затем он сообщает вам, когда начинается следующий рабочий день (если в настоящее время он не работает), исходя из того, закончились ли сегодняшние рабочие часы или (если после полуночи) начнется.

Пока все идет хорошо, и для создания наиболее читабельного кода, который я мог бы использовать strtotime() - но как вы тестируете strtotime()?

Есть ли способ временно изменить системное время для тестирования?

Ответы [ 6 ]

3 голосов
/ 30 марта 2009

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

1 голос
/ 29 ноября 2012

Для проверки времени вы можете использовать http://www.teststrtotime.com (нажмите Enter, чтобы отправить форму, кнопка пока не работает).

1 голос
/ 30 марта 2009

Проверьте эту страницу , это все, что вам нужно. :)

1 голос
/ 30 марта 2009

strtotime принимает второй аргумент, который устанавливает время, которое вы хотите, вместо текущего времени

int strtotime (строка $ time [, int $ now])

$ time - формат для имитации

$ сейчас это временная метка для генерации даты из

если задано значение «сейчас», оно переопределяет текущее время.

например. чтобы проверить 18:00 в понедельник, 30 марта, независимо от того, в какое время запускается программа

$format = '2009-03-30 18:00'
$timestamp = mktime(18,0,0,3,30,2009);
strtotime($format,$timestamp);
0 голосов
/ 30 марта 2009

Вам даже не нужно использовать второй аргумент для strtotime ();

// $now = time( ); // use this once testing is finished
$now = strtotime( '03/15/2009 14:53:09' ); // comment this line once testing is complete

testTime( $now );
0 голосов
/ 30 марта 2009

почему бы не просто модульный тест, содержащий массив входных значений strtotime ()?

...
  test( strtotime("now") );
  test( strtotime("10 September 2000") );
  test( strtotime("+1 day") );
  test( strtotime("+1 week") );
  test( strtotime("+1 week 2 days 4 hours 2 seconds") );
  test( strtotime("next Thursday") );
  test( strtotime("last Monday") );
...