【发布时间】:2020-11-17 23:15:43
【问题描述】:
嗨,当输入在日期 (29,30,31) 时,我通过循环和丢失几个月来进行摊销
这是我的一些代码:
if (vm.amortisasirequest.pR_StartDate != vm.amortisasirequest.pR_MaturityDate) {
var startdate = new Date(vm.amortisasirequest.pR_StartDate);
var endate = new Date(vm.amortisasirequest.pR_MaturityDate);
vm.kartuAmortisasi = [];
if (endate.getFullYear() == startdate.getFullYear()) {
jumbulan = endate.getMonth() - startdate.getMonth();
} else if (endate.getFullYear() > startdate.getFullYear()) {
jumbulan = (endate.getMonth() + ((endate.getFullYear() - startdate.getFullYear()) * 12)) - startdate.getMonth();
}
vm.totalBeban = vm.amortisasirequest.pO_TotalPurchase / 0.8; //+ (20 / 100 * vm.amortisasirequest.pO_NominalBarang)
vm.bebanperbulan = parseFloat(vm.totalBeban / jumbulan).toFixed(2);
vm.beban = vm.bebanperbulan;
vm.bebanPertamax = vm.beban;
var j = 0;
var dateNow = new Date();
for (var i = 0; i <= jumbulan; i++) {
var nextMonth = angular.copy(loopdate);
nextMonth.setMonth(nextMonth.getMonth() + 1);
if (nextMonth < dateNow) {
vm.beban = parseFloat(vm.beban) + parseFloat(vm.bebanperbulan);
vm.beban = parseFloat(vm.beban).toFixed(2);
vm.bebanPertamax = vm.beban;
}
else {
// Periode Terakhir
if (i == jumbulan) {
vm.totalAmor = 0;
for (var k = 0; k < vm.kartuAmortisasi.length; k++) {
vm.totalAmor = vm.totalAmor + parseFloat(vm.kartuAmortisasi[k].amortizeAmount);
}
vm.beban = vm.totalBeban - vm.totalAmor;
}
vm.kartuAmortisasi.push({ periode: j + 1, valueDate: angular.copy(loopdate), amortizeAmount: parseFloat(vm.beban).toFixed(2) });
if (j == 0)
vm.kartuAmortisasi[0].isProceed = true;
vm.beban = vm.bebanperbulan;
//vm.beban = parseFloat(vm.beban).toFixed(2);
j++;
}
loopdate.setMonth(loopdate.getMonth() + 1);
}
vm.amortisasirequest.listKartuAmortisasi = vm.kartuAmortisasi;
vm.amortisasirequest.pO_NilaiBuku = parseFloat(vm.totalBeban) - parseFloat(vm.bebanPertamax);
vm.amortisasirequest.jurnalDetail = [];
AmortisasiRequestService.processJurnalOtomatis({ poNo: vm.selectedPurchaseOrder.poId, narrative: vm.amortisasirequest.requestId }).then(function (data) {
for (var i = 0; i < data.data.length; i++) {
data.data[i].amount = vm.bebanPertamax;
vm.amortisasirequest.jurnalDetail.push(data.data[i]);
}
vm.refreshData();
});
}
})
大部分包含空月份的数据都在二月,在二月循环跳过:
我应该改变什么?
【问题讨论】:
-
你能把问题简化一点吗?
-
您可以使用我编写的代码:
function addMonth(dt, dom) { var nextMonth=new Date(dt); nextMonth.setMonth(nextMonth.getMonth()+1); nextMonth.setDate(dom); while( (12+nextMonth.getMonth())%12 > (12+dt.getMonth()+1)%12) { nextMonth.setDate(nextMonth.getDate()-1); } return nextMonth; }dt是起始月份,dom是起始日期。addMonth返回后,检查是否仍在范围内(如果超过,但未命中成熟度 - 添加成熟度)。您需要传递有效的dt(日期对象)和dom(正整数1-31)。
标签: javascript date