如何抵消系统时间来测试我的PHP函数?

时间:2009-03-30 16:09:59

标签: php time strtotime

我正在编写一个函数,确定时间是否在一个工作日的上午9点到下午5点之间。然后根据今天的营业时间是否已经结束或者(如果在午夜之后)即将开始,它会告诉您下一个工作日的开始时间(如果当前是非工作时间)。

到目前为止,一切进展顺利,并创建了我可以使用strtotime()的最易读的代码 - 但是如何测试strtotime()

有没有办法暂时改变系统时间以进行测试?

6 个答案:

答案 0 :(得分:3)

只需使用strtotime()的可选第二个参数,即可为其提供特定的时间戳。如果您不提供第二个参数,则使用当前时间。

答案 1 :(得分:1)

strtotime接受第二个参数,将时间设置为您想要的而不是当前时间

int strtotime(string $ time [,int $ now])

$ time是模仿的格式

$ now是从

生成日期的时间戳

如果现在提供它会覆盖当前时间。

e.g。无论程序在什么时间运行,都要在3月30日星期一下午6点进行测试

$format = '2009-03-30 18:00'
$timestamp = mktime(18,0,0,3,30,2009);
strtotime($format,$timestamp);

答案 2 :(得分:1)

查看this page,这就是您所需要的一切。 :)

答案 3 :(得分:1)

要测试strtotime,您可以使用http://www.teststrtotime.com(按回车键提交表单,按钮现在似乎已断开)。

答案 4 :(得分:0)

为什么不只是一个具有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") );

答案 5 :(得分:0)

你甚至不需要为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 );