Javascript 以更聪明的方式进行大量的日期比较
我正在制作一个预订系统,在这里我必须根据旺季/淡季等提高或降低价格 以下是Alessandro提供的一些良好帮助后的最后一个函数:) 它现在可以工作,而不需要在一年的季节阵列Javascript 以更聪明的方式进行大量的日期比较,javascript,Javascript,我正在制作一个预订系统,在这里我必须根据旺季/淡季等提高或降低价格 以下是Alessandro提供的一些良好帮助后的最后一个函数:) 它现在可以工作,而不需要在一年的季节阵列 var seasonArray = [ { "season": "HIGH Season", "from": 101, "to": 315, "pct": 30 }, {
var seasonArray = [
{
"season": "HIGH Season",
"from": 101,
"to": 315,
"pct": 30
},
{
"season" : "MIDDLE Season",
"from": 316,
"to": 615,
"pct" : 10
},
{
"season" : "LOW Season",
"from": 616,
"to": 915,
"pct" : -10
}
]
var checkin = Date.parse('2017-01-01 00:00:00')
var checkout = Date.parse('2017-09-05 00:00:00')
calcPrice(checkin, checkout);
function calcPrice(checkin, checkout){
var nights = daysBetween(new Date(checkin), new Date(checkout))
var totPrice = calcPeriod(nights,checkin);
var avgPrice = Math.round(totPrice/nights);
totPrice = avgPrice * nights //compensate for math.round difference
var finalPrice = 0;
for (var d = new Date(checkin); d <= checkout; d.setDate(d.getDate() + 1)) {
dn = Number((d.getMonth()+1) + ('0' + d.getDate()).slice(-2))
var season = seasonArray.find(item => {
return item.from <= dn && item.to >= dn
});
var pct = season ? season.pct : 0;
finalPrice += avgPrice * (1 + pct / 100);
}
finalPrice = Math.round(finalPrice)
console.log('totPrice: ' + totPrice)
console.log('finalPrice: ' + finalPrice)
}
var数组=[
{
“季节”:“旺季”,
“from”:101,
“至”:315,
“pct”:30
},
{
“季节”:“中期”,
“from”:316,
“至”:615,
“pct”:10
},
{
“季节”:“淡季”,
“from”:616,
“至”:915,
“pct”:-10
}
]
var checkin=Date.parse('2017-01-01 00:00:00')
var checkout=Date.parse('2017-09-05 00:00:00')
计算(签入、签出);
功能计算(签入、签出){
var nights=两天之间(新日期(签入)、新日期(签出))
var totPrice=calcPeriod(夜间,入住);
var avgPrice=数学轮(总价/夜);
totPrice=avgPrice*nights//math.round差异补偿
var finalPrice=0;
对于(var d=新日期(签入);d{
return item.from=dn
});
var pct=季节?季节。pct:0;
最终价格+=平均价格*(1+pct/100);
}
最终价格=数学轮(最终价格)
console.log('totPrice:'+totPrice)
console.log('finalPrice:'+finalPrice)
}
您可以使用如下方法:
- 创建一个日期范围为的数组(在我的示例中,您可以使用变量轻松更改当前年份)
- 每天从签入到签出循环
- 最后使用
功能获得调整最终价格的正确“季节”find
var数组=[{
“季节”:“旺季”,
“from”:日期解析('2017-01-01 00:00:00'),
“to”:Date.parse('2017-03-15 23:59:59'),
“pct”:30
}, {
“季节”:“中期”,
“from”:日期解析('2017-03-16 00:00:00'),
“to”:Date.parse('2017-06-15 23:59:59'),
“pct”:10
}, {
“季节”:“淡季”,
“from”:日期解析('2017-06-16 00:00:00'),
“to”:Date.parse('2017-09-15 23:59:59'),
“pct”:-10
}]
var checkin=Date.parse('2017-01-06 00:00:00');
var checkout=Date.parse('2017-05-18 00:00:00');
var天数=(签出/1000-签入/1000)/86400//每天几秒钟
var totPrice=13200;
var avgPrice=总价格/天;
var finalPrice=0;
对于(var d=新日期(签入);d{
return item.from=d
});
var pct=季节?季节性:0 ;;
最终价格+=平均价格*(1+pct/100);
}
console.log(“最终价格为:”+最终价格)代码>向我们展示您的代码而不是伪代码请让我先做一点清理工作,这样它才像样:-DDon不会清理您的代码。向我们展示您所拥有的,我们将帮助您优化它感谢您这么多Alessandro-非常优雅的解决方案,而且它很有效!!除了一件小事。季节应该每年都有效,所以我们不能将“2017”放在季节数组中。有没有办法修复项目。from=d
这样它会自动将年份从“d”改为“from/to”项目?嗯,不,这行不通-将from/to项目视为116=1月16日和1224=12月24日这样的数字,然后将“d”改为相同的数字如何?是的,这就成功了-我将在上面的问题中发布,这样你就可以看到了。而且非常快!非常感谢你的帮助。我很高兴它帮助了你。。。再见