Php 我如何获得一个月中某一天的下一个事件

Php 我如何获得一个月中某一天的下一个事件,php,stripe-payments,Php,Stripe Payments,我正试图让stripe在用户选择的月份的任何一天的下一次事件上设置结束日期。i、 e.如果今天是16号,用户选择15号,我需要下个月15号的unix时间戳。但是如果今天是14号,我需要明天的时间戳 我尝试了这个问题的解决方案 当我运行问题中建议的代码时,用15代替31 $nextnth = mktime(0, 0, 0, date('n') + (date('j') >= 31), 31); echo date('Y-m-d', $nextnth); 结果是2013-03-03 我也试

我正试图让stripe在用户选择的月份的任何一天的下一次事件上设置结束日期。i、 e.如果今天是16号,用户选择15号,我需要下个月15号的unix时间戳。但是如果今天是14号,我需要明天的时间戳

我尝试了这个问题的解决方案

当我运行问题中建议的代码时,用15代替31

$nextnth = mktime(0, 0, 0, date('n') + (date('j') >= 31), 31);

echo date('Y-m-d', $nextnth);
结果是2013-03-03

我也试过这个

当我运行2013-1-31时,第二个会给我2013-03-31


两者都有意想不到的结果。问题出在二月吗?任何指导都将不胜感激。

我真的不完全理解这个问题。例如,您可以轻松确定接下来30天的日期

$next_ts = time() + 30 * 86400; // add 30 days to current timestamp
$next = date('Y-m-d', $next_ts);   // format string as Y-m-d 
echo $next;

如果这不是您需要的,请解释问题。

这里有一种方法

function nextDate($userDay){      

  $today = date('d'); // today

  $target = date('Y-m-'.$userDay);  // target day

  if($today <= $userDay){

   $return = strtotime($target);

  }
  else{

   $thisMonth = date('m') + 1;
   $thisYear = date('Y');

   if($userDay >= 28 && $thisMonth == 2){
       $userDay = 28;
   }


   while(!checkdate($thisMonth,$userDay,$thisYear)){

     $thisMonth++;

     if($thisMonth == 13){

       $thisMonth = 1;
       $thisYear++;

     }

   }      

   $return = strtotime($thisYear.'-'.$thisMonth.'-'.$userDay);

  }

  return $return; 

}

// usage
echo date('Y-m-d',nextDate(29));
函数下一个日期($userDay){
$today=日期('d');//今天
$target=date('Y-m-'.$userDay);//目标日期
如果($today=28&$thisMonth==2){
$userDay=28;
}
而(!checkdate($thisMonth,$userDay,$thisYear)){
$thisMonth++;
如果($thisMonth==13){
$thisMonth=1;
$thisYear++;
}
}      
$return=strottime($thisYear.-'.$thisMonth.-'.$userDay);
}
return$return;
}
//用法
回音日期('Y-m-d',下一个日期(29));
我们得到了用户的选择,并在今天进行了比较

  • 如果今天小于或等于用户选择,则返回本月的时间戳

  • 如果“今天”大于“用户选择”,则我们循环浏览日期,添加一个月(如果$thisMonth达到13,则添加一年)。一旦这个日期再次存在,我们就有了答案


我们使用和来检查日期。

我不想要30天,我想要最接近的15日或12日或客户选择的任何日期。但是最接近的“31”到“2013-01-31”是什么呢!啊,谢谢你让我走上正轨!我确实添加了一些代码,以防下个月是二月。很好的回答,虽然我盯着代码看得头昏脑胀。没问题,在编辑上打了一个很好的电话。。。虽然您可能希望在第一个if语句中使用相同的逻辑。。。因为我猜$userDay可能是2月29日,今天是2月28日,系统将假定为3月1日,我认为这不是您想要的。:)