Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP项目和在线编译器之间的不同函数输出_Php_Function_Date - Fatal编程技术网

PHP项目和在线编译器之间的不同函数输出

PHP项目和在线编译器之间的不同函数输出,php,function,date,Php,Function,Date,我有这个功能: function dateCalculator ($date, $frequency, $duration) { $startingDate = $date; $day = $startingDate->format('d'); $startingDate->setDate($startingDate->format('Y'), $startingDate->format('m'), 1); for ($i = 0; $i < $

我有这个功能:

         function dateCalculator ($date, $frequency, $duration) {
$startingDate = $date;
$day = $startingDate->format('d');
$startingDate->setDate($startingDate->format('Y'), $startingDate->format('m'), 1);

for ($i = 0; $i < $duration; $i++) {

  $startingDate->modify("+{$frequency} month");

  echo $startingDate->format('t') < $day ? $startingDate->format('Y-m-t') : $startingDate->format('Y-m-' . $day);
  echo '<br />';
}

}//end of function

$date = new DateTime('2000-01-31');
dateCalculator($date, 1, 30);
此函数在每次迭代时进行新的计算,并填充前端输出的
数组。
所以,迭代次数是
$duration,12/$frequency
是添加到日期的月数,
$date
是来自函数参数的数据时间对象

另外,在这个类中,我在函数下面添加了
public
关键字到函数中,并将return替换为echo,因此现在看起来:

 public function dateCalculator ($date, $frequency, $duration) {
 $startingDate = $date; // or whatever
 $day = $startingDate->format('d');
 $startingDate->setDate($startingDate->format('Y'), $startingDate->format('m'), 1);

  for ($i = 0; $i < $duration; $i++) {
    $startingDate->modify("+{$frequency} month");
      return $startingDate->format('t') < $day ? $startingDate->format('Y-m-t') : $startingDate->format('Y-m-' . $day);
  }//for

}//end of function
公共函数日期计算器($date、$frequency、$duration){
$startingDate=$date;//或其他
$day=$startingDate->format('d');
$startingDate->setDate($startingDate->格式('Y'),$startingDate->格式('m'),1);
对于($i=0;$i<$duration;$i++){
$startingDate->modify(“+{$frequency}月”);
返回$startingDate->format('t')<$day?$startingDate->format('Y-m-t'):$startingDate->format('Y-m-')。$day);
}//为了
}//功能结束
但是这个函数的结果有点 相同的。。。开始日期:2010年8月31日,添加1个月50次。下一个 迭代:2010年9月1日,这已经不正确了,在线 它给出了所有权利,比如2010年8月31日,2010年9月30日,2010年10月31日, 2010年11月30日、2010年12月31日、2011年1月31日、2011年2月28日

怎么了/


编辑:我注意到,如果我把日期改为2000年2月20日,加上1个月,无论如何,下一个日期是2000年3月1日(下个月的第一个日期)。但为什么会发生呢?)
在那之后,下一次迭代的日期是1。01/04/2000, 01/05/2000 ... 所以,第一次迭代失败了,它产生了所有像domino原理一样的失败

迭代时有些东西不正常。因此,现在,当在for循环中调用该函数以更改每次迭代的日期时,下面的函数以正确的方式工作

此代码以特定模式将任意月数添加到日期: 第一种情况:如果开始日期天=本月的天数 第二种情况:如果开始日期不等于 月,但大于或等于28第三种情况:如果开始日期 一天不到28天

假设我们有一个函数,其中声明了一个$date变量 一些格式。现在,我们必须决定我们必须申请什么样的案例。使用 此代码:

if($date->format('d')==$date->format('t')){
$case=1;$day=$date->format('d');}
如果($date->format('d')!=$date->format('t')&&$date->format('d')>=28){
$case=2;$day=$date->format('d');}
如果($date->format('d')!=$date->format('t')&&$date->format('d')<28){
$case=3;$day=$date->format('d');}
接下来,只需使用这个函数$日期参数是当前值(初始值) 日期$日期在先前的if语句中确定(从 开始日期),$M是要在此日期和$case中添加的月份数 来自确定哪种算法的先前if语句 要使用的分支

函数日期计算器($date,$day,$M,$case){
//案例1=>天是一个月的最后一天
//案例2=>day不是一个月的最后一天,而是28天+
//案例3=>一天少于28天
//M=12/频率
如果($case==1){
$date->modify(‘下个月的最后一天’);
}//案例1
如果($case==2&&$M==1){
$date->modify(‘下个月的第一天’);
如果($day>$date->format('t')){
$date->modify('本月最后一天');}
如果($day<$date->format('t')){
$date->modify(‘本月的最后一天’);
$temp=$date->format('t')-$day;
$date->modify('-'.$temp.'days');
}
如果($day==$date->format('t')){
$date->modify(‘本月最后一天’);
}
}//案例2 M 1
如果($case==2&&M!=1){
$date->modify(“$M.”月的第一天”);
如果($day>=$date->format('t')){
$date->modify(‘本月最后一天’);
}否则{
$date->modify(‘本月的最后一天’);
$temp=$date->format('t')-$day;
$date->modify('-'.$temp.'days');
}
}//案例2 M
如果($case==3){
$date->modify('+'.$M.'months');
}//案例3
}//功能结束

基本时区协调人?对不起,我不明白你的意思。可能这些信息会有用:我的项目功能(main)使用$date->modify($months);其中$months=(12/$frequency)。'月;;但它给我提供了我不想要的日期,所以这就是为什么我要实现这个dateCalculator()函数,以获得我需要的日期,就像斯库齐说的那样。你可能有时区困难。这就是为什么我们往往不自己滚动我怎么能检查它?可能是日期格式造成的吗?因为在dateCalculator()中,它使用了许多不同的格式,但在array result中,它将日期放在格式(“d/m/Y”)中;我注意到,如果我把日期定为2000年2月20日,加上1个月,无论如何,下一个日期是2000年3月1日(下个月的第一个日期)。但是为什么会发生呢?)在那之后,下一次迭代的日期是1。01/04/2000, 01/05/2000 ... 所以,第一次迭代失败了,它产生了像多米诺原理一样的失败,这是否意味着这不是由时区引起的?
 public function dateCalculator ($date, $frequency, $duration) {
 $startingDate = $date; // or whatever
 $day = $startingDate->format('d');
 $startingDate->setDate($startingDate->format('Y'), $startingDate->format('m'), 1);

  for ($i = 0; $i < $duration; $i++) {
    $startingDate->modify("+{$frequency} month");
      return $startingDate->format('t') < $day ? $startingDate->format('Y-m-t') : $startingDate->format('Y-m-' . $day);
  }//for

}//end of function
if ($date->format('d') == $date->format('t')) {
      $case = 1; $day = $date->format('d'); } 
    if ($date->format('d') != $date->format('t') && $date->format('d') >= 28) {
      $case = 2; $day = $date->format('d'); }
    if ($date->format('d') != $date->format('t') && $date->format('d') < 28){
      $case = 3; $day = $date->format('d'); } 
function dateCalculator($date, $day, $M, $case){
//case1 => day is last day of the month
//case2 => day is not last day of the month, but is 28+
//case3 => day is less then 28
//M = 12/frequency 
              if($case == 1) {
              $date->modify('last day of next month');
              }//case1

             if($case == 2 && $M == 1) {
              $date->modify('first day of next month');
                if($day > $date->format('t')){
                  $date->modify('last day of this month');}
                if($day < $date->format('t')) {
                  $date->modify('last day of this months');
                  $temp = $date->format('t') - $day;
                  $date->modify('-' . $temp . ' days');
                }
                if($day == $date->format('t')) {
                  $date->modify('last day of this month');
                }
             }//case2 M 1

              if($case == 2 && $M != 1) {
                $date->modify('first day of ' . $M . ' months');
                  if($day >= $date->format('t')) {
                    $date->modify('last day of this month');
                  } else {
                  $date->modify('last day of this months');
                  $temp = $date->format('t') - $day;
                  $date->modify('-' . $temp . ' days');
                  }
             } //case 2 M <>

             if($case == 3) {
              $date->modify('+ ' . $M . ' months');
             }//case3

}//end of function