Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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获取每月15号日期的方法_Php_Datetime - Fatal编程技术网

php获取每月15号日期的方法

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(

我正在尝试根据用户提供的输入输出下个月的第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(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';
}