如何设置PHP解释器的内部时间?
我用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
$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;
}