最近我想在網頁上製作一份能夠傳入起始日期及結束日期的電費試算表
請問如果要計算夏月日期天數或是不含夏月日期的天數該怎麼寫呢?
例如:
$scope.date1 = new Date("2020-05-15");
$scope.date2 = new Date("2020-07-14")
$scope.date3 = ( $scope.date2 - $scope.date1) / 1000 / 60 / 60 / 24+1;
夏月6/1~9/30
用以上的結果可以date3會等於61天 我該如何算出在夏月日期的天數44天或是普通日期的17天呢?
更新目前的寫法:
$scope.fm = new Date("2019-05-15");
$scope.to = new Date("2019-07-14")
$scope.all = ( $scope.to - $scope.fm) / 1000 / 60 / 60 / 24+1;
$scope.sfm = new Date("2019-06-01")
$scope.sto=new Date("2019-09-30")
if($scope.fm<$scope.sfm&&$scope.to>$scope.sto){
$scope.sum=(($scope.to - $scope.fm)-($scope.to - $scope.sto)-($scope.sfm - $scope.fm)) / 1000 / 60 / 60 / 24+1
}
if($scope.fm<$scope.sfm&&$scope.to<$scope.sto){
$scope.sum=(($scope.to - $scope.fm)-($scope.sfm-$scope.fm)) / 1000 / 60 / 60 / 24+1
}
if($scope.fm>$scope.sfm&&$scope.to>$scope.sto){
$scope.sum=(($scope.to - $scope.fm)-($scope.to-$scope.sto)) / 1000 / 60 / 60 / 24+1
}
if($scope.fm>$scope.sfm&&$scope.to<$scope.sto){
$scope.sum=( $scope.to - $scope.fm) / 1000 / 60 / 60 / 24+1;
}
相較於計算,如何判斷起訖在不在區間內應該比較麻煩一些些(?
假設您的判斷都已完成、知道日期區間又能算出起訖總天數
依樣畫葫蘆的方式應該就可以了
假設起訖皆在區間外:
全部天數 - (起始日期 ~ 區間頭一天 的天數) - (訖日日期 ~ 區間最後一天 的天數) = 夏月電費範圍
假設只有起始日在區間外:
全部天數 - (起始日期 ~ 區間頭一天 的天數) - (區間最後一天 ~ 訖日日期 的天數) = 夏月電費範圍
假設只有訖日在區間外:
全部天數 - (區間頭一天 ~ 起始日期 的天數) - (訖日日期 ~ 區間最後一天 的天數) = 夏月電費範圍
如果回答及理解有誤再輕鞭一些 :D
不幫你寫,只告訴你理論。
A~B = 實際天數範圍
O~P = 夏日範圍
ABOP 夏日=0 一般=B-A(全)
AOBP 夏日=B-O 一般=O-A
AOPB 夏日=OP(全) 一般=(O-A)+(B-P)
OAPB 夏日=P-A 一般=B-P
OPAB 夏日=0 一般=B-A(全)
我的想法大概這樣,這應該可以計算更複雜的狀況
let arr=[
{dat: 計算起始日期, tpy: "start"},
{dat: 計算結束日期, tpy: "end"},
{dat: 夏日電費起始, tpy: "priceChange", val: 夏日電費},
{dat: 夏日電費結束+1天, tpy: "priceChange", val: 平日電費}
];
arr.sortByDat(); //arr 依照 dat去排序
let price=平日電費,
susm=0,
lastDate=false;
for(data in arr) {
//依據收到的 data.typ 計算,更新 sum, price, lastDate
}