2016-04-13 25 views
0

我想輸出下個月的第15天,根據用戶提供的輸入。php的方式得到每月15日

例如:

2016年4月2日 - 由用戶輸入
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日,所以他們的下一個付款日期將在下個月或2016年5月15日的第15位。

+0

對於一個人來說,我實際上無法解決你在做什麼...... –

+0

@JonStirling我正在嘗試設置訂閱付款,所以無論訂閱什麼時候,付款日期總是在下個月的第15個月。 – phpnewbie

+0

獲取他們訂閱的月份。然後使用I.e月份4.添加1.然後創建日期。把它建立成一個字符串。 –

回答

0

解決的辦法很簡單,使用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 

?> 
+0

但如果month = 12? – splash58

+0

mktime會自動爲您處理。從這個意義上說,它將環繞並相應地增加一年。 – RefreshCarts

1

只需使用DateTime

 
// Your description says that $loan_date['loan_applied_date'] is 
// "already coverted in strtotime", so I assume a UNIX timestamp ... 
DateTime::createFromFormat('U', $loan_date['loan_applied_date']) 

    // When you import a UNIX timestamp into DateTime, it assumes UTC, 
    // so we need to set your timezone back to whatever it is 
    ->setTimezone(new DateTimeZone(date_default_timezone_get())) 

    // Add 1 month 
    ->modify('+1 month') 

    // Hard-code the 15th day 
    ->format('15/m/Y'); 
0

我沒有類似的東西來定期付款,此代碼每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'; 
}