$price
— полная стоимость
$first
— первоначальный взнос в %
$rate
— ставка в %
$years
— кол-во лет
function calc_annuity($price,$first,$rate,$years){
$credit_price=$price-($price*$first/100);
$real_rate=$rate/100;
$pay_year=$credit_price*($real_rate+($real_rate/(pow(1+$real_rate,$years)-1)));
$pay_month=$pay_year/12;
return $pay_month;
}
Например для расчета ежемесячного платежа для суммы 2000000, с первоначальным взносом 15% под 10.7% годовых на 20 лет
echo calc_annuity(2000000,15,10.7,20);
Еще вариант:
<?php
// Задаем начальные данные
$loanAmount = 1000000; // сумма кредита
$interestRate = 12 / 100; // процентная ставка (годовая)
$loanTerm = 12; // срок кредита (месяцы)
// Расчет ежемесячного платежа
$monthlyInterestRate = $interestRate / 12; // процентная ставка (месячная)
$annuityFactor = $monthlyInterestRate * pow(1 + $monthlyInterestRate, $loanTerm) / (pow(1 + $monthlyInterestRate, $loanTerm) - 1);
$monthlyPayment = $annuityFactor * $loanAmount;
echo "Ежемесячный платеж: " . round($monthlyPayment, 2) . " рублей";
?>
php:
class Calendar{
public static function getMonth($month,$year,$events=array()){
$months=array(
1=>'Январь',
2=>'Февраль',
3=>'Март',
4=>'Апрель',
5=>'Май',
6=>'Июнь',
7=>'Июль',
8=>'Август',
9=>'Сентябрь',
10=>'Октябрь',
11=>'Ноябрь',
12=>'Декабрь'
);
$month=intval($month);
$out='
<div class="calendar-item">
<div class="calendar-head">'.$months[$month].' '.$year.'</div>
<table>
<tr>
<th>Пн</th>
<th>Вт</th>
<th>Ср</th>
<th>Чт</th>
<th>Пт</th>
<th>Сб</th>
<th>Вс</th>
</tr>';
$day_week=date('N',mktime(0,0,0,$month,1,$year));
$day_week--;
$out.='<tr>';
for($x=0;$x<$day_week;$x++){
$out.='<td></td>';
}
$days_counter=0;
$days_month=date('t',mktime(0,0,0,$month,1,$year));
for($day=1;$day<=$days_month;$day++){
$class='';
$month_url=($month<10)?'0'.$month:$month;
$day_url=($day<10)?'0'.$day:$day;
if((!isset($_GET['date'])&&date('j.n.Y')==$day.'.'.$month.'.'.$year)||($_GET['date']==$year.'-'.$month_url.'-'.$day_url)){
$class.=' today';
}
if(strtotime('-1 day')>strtotime($day.'.'.$month.'.'.$year)){
$class.=' last';
}
$event_show=false;
$event_text=array();
if(!empty($events)){
foreach($events as $date=>$text){
$date=explode('.',$date);
if(count($date)==3){
$y=explode(' ',$date[2]);
if(count($y)==2){
$date[2]=$y[0];
}
if($day==intval($date[0])&&$month==intval($date[1])&&$year==$date[2]){
$event_show=true;
$event_text[]=$text;
}
}
elseif(count($date)==2){
if($day==intval($date[0])&&$month==intval($date[1])){
$event_show=true;
$event_text[]=$text;
}
}
elseif($day==intval($date[0])){
$event_show=true;
$event_text[]=$text;
}
}
}
if($event_show){
$class.=' event';
}
$out.='<td class="calendar-day'.$class.'"><a href="'.ADMIN_URL.'?work=schedule&date='.$year.'-'.$month_url.'-'.$day_url.'">'.$day.'</a>';
if($event_show){
if(!empty($event_text)){
$out.='<div class="calendar-popup"><div>'.implode('</div><div>',$event_text).'</div></div>';
}
}
$out.='</td>';
if($day_week==6){
$out.='</tr>';
if(($days_counter+1)!=$days_month){
$out.='<tr>';
}
$day_week=-1;
}
$day_week++;
$days_counter++;
}
$out.='</tr></table></div>';
return $out;
}
public static function getInterval($start,$end,$events=array()){
$curent=explode('.',$start);
$curent[0]=intval($curent[0]);
$end=explode('.',$end);
$end[0]=intval($end[0]);
$begin=true;
$out='<div class="calendar-wrp">';
do{
$out.=self::getMonth($curent[0],$curent[1],$events);
if($curent[0]==$end[0]&&$curent[1]==$end[1]){
$begin=false;
}
$curent[0]++;
if($curent[0]==13){
$curent[0]=1;
$curent[1]++;
}
}
while($begin==true);
$out.='</div>';
return $out;
}
}
css:
.calendar-item{
width:200px;
display:inline-block;
vertical-align:top;
margin:0 15px 20px;
}
.calendar-head{
text-align:center;
padding:5px;
font-weight:700;
font-size:14px;
}
.calendar-item table{
border-collapse:collapse;
width:100%;
}
.calendar-item th,.calendar-item td{
font-size:12px;
text-align:center;
}
.calendar-item th{
padding:5px;
color:#888888;
font-weight:400;
}
.calendar-item td{
border:1px solid #dddddd;
}
.calendar-item td a{
text-decoration:none;
padding:5px;
display:block;
}
.calendar-item td a:hover{
background:#dddddd;
}
.calendar-item tr th:nth-child(6) a,.calendar-item tr th:nth-child(7) a,
.calendar-item tr td:nth-child(6) a,.calendar-item tr td:nth-child(7) a{
color:#e65a5a;
}
.calendar-day.last a{
color:#999999 !important;
}
.calendar-day.event{
position:relative;
cursor:pointer;
}
.calendar-day.event a{
background:#e6f3fe;
}
.calendar-day.today a{
background:#fe9c4b;
color:#ffffff;
}
.calendar-day.event:hover .calendar-popup{
display:block;
}
.calendar-popup{
display:none;
position:absolute;
top:40px;
left:0;
min-width:200px;
padding:15px;
background:#ffffff;
text-align:left;
font-size:12px;
z-index:100;
box-shadow:0 0 10px rgba(0,0,0,0.5);
color:#000000;
}
.calendar-popup div{
margin-bottom:5px;
}
.calendar-popup:before{
content:"";
border:solid transparent;
position:absolute;
left:8px;
bottom:100%;
border-bottom-color:#ffffff;
border-width:9px;
margin-left:0;
}
Использование:
Текущий месяц
echo Calendar::getMonth(date('n'), date('Y'));
3 месяца
echo Calendar::getInterval(date('n.Y'), date('n.Y', strtotime('+2 month')));
Текущий год
echo Calendar::getInterval(date('01.Y'), date('12.Y'));
12 месяцев, начиная с текущего, с метками
формат даты:
d – день месяца, при таком формате, заданный день будет выделятся каждый месяц.
d.m – день и месяц, такая дата будет выделятся раз в год.
d.m.Y или d.m.Y H:i – точная дата.
$events=array(
'15'=>'Заплатить ипотеку',
'23.02'=>'День защитника Отечества',
'08.03'=>'Международный женский день',
'31.12'=>'Новый год'
);
echo Calendar::getInterval(date('n.Y'), date('n.Y', strtotime('+11 month')), $events);
На основе https://snipp.ru/php/php-calendar
При ошибке
Access to XMLHttpRequest at 'https://site1.ru/api.php' from origin 'https://site2.ru' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
добавить на отдающий данные сайт (в примере site1.ru) заголовок
header('Access-Control-Allow-Origin: *');