php获取每月15号日期的方法
我正在尝试根据用户提供的输入输出下个月的第15天 例如: 2016年2月4日-用户输入php获取每月15号日期的方法,php,datetime,Php,Datetime,我正在尝试根据用户提供的输入输出下个月的第15天 例如: 2016年2月4日-用户输入 2016年5月15日-计算后的产量 这是我的代码,我正在尝试: // this value is already coverted in strtotime. $today = $loan_data['loan_applied_date']; $numOfDays = date('t', $today); $base = strtotime('+'.$numOfDays.' days', strtotime(
2016年5月15日-计算后的产量 这是我的代码,我正在尝试:
// this value is already coverted in strtotime.
$today = $loan_data['loan_applied_date'];
$numOfDays = date('t', $today);
$base = strtotime('+'.$numOfDays.' days', strtotime(date('m/01/Y', $today)));
$day15 = date('m/01/Y', $base);
$time = strtotime($day15);
通过运行上面的代码,我得到了第一天。我怎么才能到15号
示例场景:
假设认购登记日期为2016年4月4日,则其下一个付款日期为下个月15日或2016年5月15日
解决方案非常简单,使用PHP,您可以利用灵活的mktime函数,如下所示:
<?php
$today = strtotime("now"); //GRAB THE DATE - YOU WOULD WANT TO REPLACE THIS WITH YOUR VALUE
$year = date("Y", $today); //GET MONTH AND YEAR VALUES
$month = date("m", $today);
$month++; //INCREMENT MONTH
echo date("d/m/Y", mktime(0, 0, 0, $month, 15, $year)); //OUTPUT WITH MKTIME
?>
只需使用:
//您的描述中说$loan_date['loan_applied_date']是
//“已经在strotime中隐藏了”,所以我假设一个UNIX时间戳。。。
DateTime::createFromFormat('U',$loan_date['loan_applied_date']))
//将UNIX时间戳导入DateTime时,它假定为UTC,
//所以我们需要把你的时区设置回它是什么
->setTimezone(新的DateTimeZone(日期\默认\时区\获取())
//加1个月
->修改(“+1个月”)
//硬编码第15天
->格式(“15/m/Y”);
我做了一些类似于定期付款的事情,该代码每15天收取一次付款:
//ini_set("date.timezone", "America/New_York"); //uncomment for test timezone
function getLastDay($date=false){
return $date?date("t", strtotime($date)):date("t", strtotime(0));
}
function monthDayMatch($data = array('startDay'=>1,'day'=>1,'lastDayMonth','startMonth'=>1,'month'=>1,'frecuency'=>1)){
if(($data['startMonth']%$data['frecuency'] == $data['month']%$data['frecuency']) && ($data['startDay'] == $data['day'] || $data['startDay'] > $data['lastDayMonth'])){
return true;
}
return false;
}
$date = '04/02/2016';
$date = explode('/',$date);
$customer_date=array('month'=>$date[0],'day'=>$date[1],'year'=>$date[2],'all'=>implode('/',$date));
$resp = monthDayMatch(array(
'startMonth'=> $customer_date['month'], //initial customer month
'month' => date('m'), //current month
'frecuency' => 1, //recurring once a month
'startDay' => date('d'), //current day day
'day' => 15, //day to validate
'lastDayMonth'=>getLastDay($customer_date['all'])
));
//every 15th is true
if($resp){
echo 'payment charge';
}else{
echo 'no payment';
}
就我个人而言,我不知道你到底想做什么…@JonStirling我正在尝试设置订阅付款,所以无论他们何时订阅,付款日期总是下个月15日。获取他们订阅的月份。然后只使用月份,即4。加1。然后确定日期。将其构建为字符串。
echo date('15/d/Y',strottime(“下个月”),strottime(“2016-02-03”)
@splash58使用您建议的方法抛出此日期1969年12月31日。MKTIME将自动为您处理此日期。从某种意义上说,它将环绕并相应地增加年份。警告+1个月
的事情在PHP中被破坏了@一个月31号的Sliq是一个边缘案例。由于并非每个月都有31天,因此存在多个可接受的解决方案的空间,将“+1个月”转换为“+31天”就是其中之一。它没有坏,只是有些人没想到。
//ini_set("date.timezone", "America/New_York"); //uncomment for test timezone
function getLastDay($date=false){
return $date?date("t", strtotime($date)):date("t", strtotime(0));
}
function monthDayMatch($data = array('startDay'=>1,'day'=>1,'lastDayMonth','startMonth'=>1,'month'=>1,'frecuency'=>1)){
if(($data['startMonth']%$data['frecuency'] == $data['month']%$data['frecuency']) && ($data['startDay'] == $data['day'] || $data['startDay'] > $data['lastDayMonth'])){
return true;
}
return false;
}
$date = '04/02/2016';
$date = explode('/',$date);
$customer_date=array('month'=>$date[0],'day'=>$date[1],'year'=>$date[2],'all'=>implode('/',$date));
$resp = monthDayMatch(array(
'startMonth'=> $customer_date['month'], //initial customer month
'month' => date('m'), //current month
'frecuency' => 1, //recurring once a month
'startDay' => date('d'), //current day day
'day' => 15, //day to validate
'lastDayMonth'=>getLastDay($customer_date['all'])
));
//every 15th is true
if($resp){
echo 'payment charge';
}else{
echo 'no payment';
}