如何设置PHP解释器的内部时间?

如何设置PHP解释器的内部时间?,php,datetime,Php,Datetime,我用PHP编写了一个函数,它将在每个月的第三个星期一打印。 我现在想测试一下这个函数是否可以在下个月运行,而不必等到下个月 我的想法是,我可以通过在内部将PHP的时间设置为下个月并运行该函数来测试该函数在未来的工作方式 我希望在我的函数之前能插入一个函数,将时间转移到未来,比如 <?php $one_month_from_now = time() + 2592000; ini_set('php_internal_time', $one_month_from_now); function

我用PHP编写了一个函数,它将在每个月的第三个星期一打印。
我现在想测试一下这个函数是否可以在下个月运行,而不必等到下个月

我的想法是,我可以通过在内部将PHP的时间设置为下个月并运行该函数来测试该函数在未来的工作方式

我希望在我的函数之前能插入一个函数,将时间转移到未来,比如

<?php

$one_month_from_now = time() + 2592000;
ini_set('php_internal_time', $one_month_from_now);

function print_third_monday() {
    // ....
}
print_third_monday();

如果有一个更好的函数可以实现相同的功能,您可以轻松地进行交叉检查:

<?php
echo getThirdTuesdayofMonth(3,2017);

function getThirdTuesdayofMonth($month, $year) {
    $thirdTuesday='';
    $no_of_days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    $tue_iter=0;
    for($i=1;$i<=$no_of_days;$i++) {
        if(date('l',strtotime($i.'-'.$month.'-'.$year))=='Tuesday') {
            if($tue_iter==3) {
                $thirdTuesday = date('dS F Y', strtotime($i.'-'.$month.'-'.$year));
            }  
            $tue_iter++; 
        }
    }
    return $thirdTuesday;
}

PHP从它运行的服务器获取时间,但您可以为任何日期创建
DateTime
实例或unix时间戳,例如
$ts=strotime('2017年4月')
@Phil,如果我理解,您是说,在我使用
$c=time()
和/或
$c=new DateTime的位置
我会用
$c=strotime('2017年4月')替换那些“当前时间”变量。
?是的,类似这样。
DateTime
构造函数可以采用与
strotime
相同的字符串参数。Phil谢谢,是的,您的原始评论将为我提供我想要的解决方案,我只需要重构一点,但我认为它会起作用:)
<?php
echo getThirdTuesdayofMonth(3,2017);

function getThirdTuesdayofMonth($month, $year) {
    $thirdTuesday='';
    $no_of_days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    $tue_iter=0;
    for($i=1;$i<=$no_of_days;$i++) {
        if(date('l',strtotime($i.'-'.$month.'-'.$year))=='Tuesday') {
            if($tue_iter==3) {
                $thirdTuesday = date('dS F Y', strtotime($i.'-'.$month.'-'.$year));
            }  
            $tue_iter++; 
        }
    }
    return $thirdTuesday;
}