2017-11-28 12 views
0

요약 : 지급 기한 날을 알려주는 프로그램을 만들려고합니다. 나는 그것이 어떻게 행해졌는지에 대한 아이디어를 가지고 있지만, 한 가지 문제가 남아있다. 고객이 1/31/17에 계정을 개설했다고 가정 해 보겠습니다. 다음 만기일은 2/28/18 (한 달 후)입니다. 내 코드에 따르면 오늘의 날이 정책이 열린 날보다 짧다면 1 개월이 지나지 않아서 한 달에 계산되지 않으므로 전체 월로 계산하지 않습니다. .다음 지급시기를 계산할 때 2 월을 고려하여

이 코드 나는 2 월 마지막 날을 제외하고는 거의 모든 날짜에 대해 작동하거나 월이 30 일에 끝나고 정책이 31 일에 열렸습니다.

고맙습니다.

$today = time();   
$policy_opened = strtotime($policy_opened); 

//number of months the policy has been opened        
$year_opened = date('Y',$policy_opened); 
$year_now = date('Y',$today);    
$month_opened = date('m',$policy_opened); 
$month_now = date('m',$today); 
$day_opened = date('d',$policy_opened); 
$day_now = date('d',$today); 
$months_since_opened = (($year_now - $year_opened) * 12) + ($month_now - $month_opened); 
$months_since_opened = $months_since_opened + 1; //since it can't start with 0 months opened. 
if($day_now < $day_opened){ 
    //this is in order to count it as one month only if a 'whole month' has passed by. 
    $months_since_opened = $months_since_opened - 1; 
} 

답변

1

다이렉트 몬트 또는 일 diffrence 계산을 위해 네이티브 datetime 함수를 사용할 수 있습니다. 여기에 월 계산을위한 코드가 있습니다. 두 날짜의 월간 차이점을 알려드립니다.

$policyOpen = "2017-12-01"; 
$toDay = "2017-12-31"; 

$smallDate = new DateTime($opened); 
$bigDate = new DateTime($toDay); 

$months_since_opened= $small->diff($big)->format("%m"); 



you can also get diffrent date related parameter as shown below 
echo $diff->y; //this will give you year diffrence 
echo $diff->m; //this will give you month diffrence 
echo $diff->d; //this will give you day diffrence 
echo $diff->h; //this will give you hours diffrence 
echo $diff->i; //this will give you minute diffrence 
echo $diff->s; //this will give you second diffrence 
+0

나는 작동하지 않습니다. 예를 들어,이 정책은 1 월 마지막 날 (2017-131)에 개설되었습니다. 오늘이 2017-2-28 (2 월 마지막 날) 인 경우 출력은 1이지만 여전히 0입니다. 내가 2017 년 2 월 31 일로 오늘 $를 움직이면 작동하지만, 우리 모두는 2 월이 28 일까지만 진행된다는 것을 알고 있습니다. –