Php 我如何获得一个月中某一天的下一个事件
我正试图让stripe在用户选择的月份的任何一天的下一次事件上设置结束日期。i、 e.如果今天是16号,用户选择15号,我需要下个月15号的unix时间戳。但是如果今天是14号,我需要明天的时间戳 我尝试了这个问题的解决方案 当我运行问题中建议的代码时,用15代替31Php 我如何获得一个月中某一天的下一个事件,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 我也试
$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日,我认为这不是您想要的。:)