javascript计算日期范围的价格
javascript calculate price for date ranges
我有一个关于javascript时间范围的问题
我有两个输入框,客户可以给出开始日期和结束日期
下面有3个季节的日期范围,我需要计算用户输入的日期范围的成本价格低于季节的映射
总共是3个季节,下面是日期范围:
淡季
5月1日至6月30日9月1日至12月14日
成本:每天5美元
旺季
1月11日至4月30日7月1日至8月31日
成本:每天10美元
旺季
-12月15日至1月10日成本:每天2美元
我写了一个代码来获取日期输入
$('#calculate').click(function(){
//get the first date
da=$('#daydropdowna').val();
ma=$('#monthdropdowna').val();
ya=$('#yeardropdowna').val();
//get the secnd date
dd=$('#daydropdownd').val();
md=$('#monthdropdownd').val();
yd=$('#yeardropdownd').val();
var oneDay = 24*60*60*1000;
var ourstart= new Date(ya,ma,da);
var oursend= new Date(yd,md,dd);
/*
11th January to 30th April
1st July to 31st August
*/
var hsstart= new Date(ya,00,11);
var hsend= new Date(ya,03,11);
var hsstart1= new Date(ya,06,01);
var hsend1= new Date(ya,07,31);
/*
1st May to 30th June
1st September to 14th December
*/
var lsstart=new Date(ya,04,01);
var lsend=new Date(ya,05,30);
var lsstart1=Date(ya,08,01);
var lsend1=new Date(ya,11,14);
/*
-15th December - 10th January
*/
var psstart=new Date(ya,11,15);
var psend=new Date(ya+1,00,10);
var myDate = ourstart;
var myDate1 = oursend;
var startDate = hsstart
var endDate = hsend
//the date range within one high season
if ((startDate < myDate) && (myDate < endDate) && (startDate < myDate1) && (myDate1 < endDate)) {
alert('seasn 1 h');
var diffDays = Math.round(Math.abs((myDate1 .getTime() - myDate .getTime())/(oneDay)));
alert (diffDays);
}
//the date range within secnd high season
var startDate = hsstart1
var endDate = hsend1
if ((startDate < myDate) && (myDate < endDate) && (startDate < myDate1) && (myDate1 < endDate)) {
alert('seasn 2 h');
var diffDays = Math.round(Math.abs((myDate1 .getTime() - myDate .getTime())/(oneDay)));
alert (diffDays);
}
//the date range within first low season
var startDate = lsstart
var endDate = lsend
if ((startDate < myDate) && (myDate < endDate) && (startDate < myDate1) && (myDate1 < endDate)) {
alert('season 1 l');
var diffDays = Math.round(Math.abs((myDate1 .getTime() - myDate .getTime())/(oneDay)));
alert (diffDays);
}
//the date range within second low season
var startDate = lsstart1
var endDate = lsend1
if ((startDate < myDate) && (myDate < endDate) && (startDate < myDate1) && (myDate1 < endDate)) {
alert('season 2 l');
var diffDays = Math.round(Math.abs((myDate1 .getTime() - myDate .getTime())/(oneDay)));
alert (diffDays);
}
//peak
var startDate = psstart
var endDate = psend
if ((startDate < myDate) && (myDate < endDate) && (startDate < myDate1) && (myDate1 < endDate)) {
alert('season p');
var diffDays = Math.round(Math.abs((myDate1 .getTime() - myDate .getTime())/(oneDay)));
alert (diffDays);
}
//if not wihin a specific range cacuate for all
});
所以我需要根据用户输入来计算总价,Ex用户输入2012-05-05-2013-01-05这需要计算3个季节日期的价格,这涵盖了日期范围。请帮我解决这个问题,谢谢。。。
我不打算为您编码,但逻辑如下:
tempDate = inputStartDate
for each season
if seasonStart <= tempDate
if inputEndDate <= seasonEnd
price = price + (inputEndDate - tempDate) * seasonCost
break
else
price = price + (seasonEnd - tempDate) * seasonCost
tempDate = seasonEnd + 1 day
price
将包含整个日期范围的总成本/天。
听起来,你需要的是一点帮助来分解你的工作;)
我想解决这个问题的方法是设计一个自定义的dateRangeDistance函数。你想给出一个开始日期,找出那天比你的某个范围结束日期早多少天,然后给出一个结束日期,计算出比它所在的日期范围早多少天。我也会把你的日期范围定义为地图,而不是那些讨厌的变量。
var peakSeason = {startDate: w/e, endDate: w/e, numDays: w/e, costRatePerDay: w/e}
var lowSeason1 = {startDate: w/e, endDate: w/e, numDays: w/e, costRatePerDay: w/e}
var lowSeason2 = {startDate: w/e, endDate: w/e, numDays: w/e, costRatePerDay: w/e}
// .... etc
var allSeasons = [peakSeason, lowSeason1, ...] // put these in order and it can help iterating date ranges between
var numberDaysStartFromEndOfRange = function(startDate) {
// iterate through the allSeasons map and find what range this is in
// return {numDays: whateverYouCalculate, dateRange: name your date ranges uniquely}
}
var numberDaysEndFromStartOfRange = function(startDate) {
// iterate through the allSeasons map and find what range this is in
// return {numDays: whateverYouCalculate, dateRange: name your date ranges uniquely}
}
实际上,你可以让这些函数成为同一个函数,并传递第二个参数来判断你是从前面计数还是从后面计数。不过,这应该会让你走上正轨。如果你需要更多的帮助,你可以问,但你也需要明白,这不是一个为你编写算法的网站;)
一句话:利用一些辅助函数和数据结构的映射来帮助将工作分解为更易于管理的块!
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何从范围滑块动态值计算输入值
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- Angularjs:访问范围变量数组并计算平均值
- 计算时间范围并将其保存到文件
- JavaScript 算法性能 - 计算可被 k 整除的范围内的数字数
- 计算给定日期范围内的星期一
- 计算范围内的整数
- D3.js:计算随范围变化的时间尺度上的柱线宽度
- 在范围变量更改后重新计算传递给指令的属性
- 将字符串差异计算为范围
- javascript计算日期范围的价格
- 可以't计算html输入类型范围的值
- 什么是最好的方法来计算字符数在html dom节点(在文档节点使用javascript范围库)
- Javascript根据CIDR前缀计算IPv6范围
- 使用计算的可观察性的对象范围
- 从开始 - 结束日期和时间 (UTC) 计算出日期范围
- 算法-计算范围上的缺口值
- 如何使用lodash来计算许多范围,如X< 10,10
- 以月为单位计算给定日期范围内的天数,使用momentjs计算天数