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

发布于 2024-07-16 11:12:21 字数 240 浏览 4 评论 0原文

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

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

有没有办法临时更改系统时间以进行测试?

I'm writing a function that works out whether or not the time is between 9am and 5pm on a working day. It then tells you when the next working day starts (if currently out of business hours) based on whether today's business hours have ended or (if after midnight) are about to begin.

All is going well so far, and to create the most readable code I could’ve used strtotime() -– but how do you test strtotime()?

Is there a way to alter the system time temporarily for testing purposes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

凝望流年 2024-07-23 11:12:21

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

Just use strtotime()'s optional second argument, to give it a specific timestamp to use. If you don't supply the second argument, it uses the current time.

So尛奶瓶 2024-07-23 11:12:21

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

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

$time 是模仿的格式

生成日期的时间戳

$now 是从if now 前提是它会覆盖当前时间。

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

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

strtotime accepts a second argument that sets the time to whatever you want instead of the current time

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

$time is the format to mimic

$now is the timestamp to generate the date from

if now is provided it overrides the current time.

e.g. to test 6pm on Monday March 30th no matter what time the program runs

$format = '2009-03-30 18:00'
$timestamp = mktime(18,0,0,3,30,2009);
strtotime($format,$timestamp);
稀香 2024-07-23 11:12:21

要测试 strtotime,您可以使用 http://www.teststrtotime.com (按 Enter 提交表单,按钮目前看来已损坏)。

To test strtotime you can use http://www.teststrtotime.com (press enter to submit the form, the button seems broken for now).

鱼忆七猫命九 2024-07-23 11:12:21

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

why not just a unit test that has an array of strtotime() input values?

...
  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") );
枯寂 2024-07-23 11:12:21

您甚至不需要使用 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 );

You don't even need to use the second argument for 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 );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文