【问题标题】:javascript calculate price for date rangesjavascript计算日期范围的价格
【发布时间】:2012-03-06 19:42:50
【问题描述】:

我有一个关于 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











});

所以我需要根据用户输入计算总价,前用户输入 2012-05-05 - 2013-01-05 这需要计算涵盖日期范围的 3 个季节日期的价格。请帮我解决这个问题,谢谢...

【问题讨论】:

  • 有什么问题?听起来像......“请为我做我的代码”..如果你已经尝试显示这些尝试的代码
  • 是的,我做了一些代码,但我无法得到正确的结果,这仅计算匹配范围内的值,我希望这个 fr 检查 fr 许多季节。她在上面我添加了我的代码
  • 那是一堆代码@Suneth,也许您可​​以更直接地了解这段代码的失败之处?我可能建议尝试的一件事是下载 jstestdriver 之类的东西并尝试针对这个问题进行一些测试驱动开发:)
  • 那么您到底对哪一部分有问题?简要查看您的代码后,您似乎正在使用用户输入年份作为所有参考点。不会有变化吧?您能否更具体地说明不工作的部分?
  • 用户输入 2012-01-05 到 2012-6-5 这需要计算 150 天,有两个不同的季节,每个季节的每日价格不同,如何提取第一季日期计数和第二季日期计数。谢谢你..

标签: javascript jquery date range


【解决方案1】:

我不会为你编写代码,但逻辑如下:

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 将包含整个日期范围内的总费用/天。

【讨论】:

    【解决方案2】:

    你在这里需要的,听起来像是对分解你的工作有一点帮助;)

    我想解决这个问题的方法是设计一个自定义的 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}
    }
    

    真的,您可以将这些函数设为相同的函数,并传递第二个参数来判断您是从前数还是从后数。不过,这应该使您走上正轨。如果您需要更多帮助,您可以提出要求,但您也需要了解这不是一个为您编写算法的网站;)

    底线:利用一些辅助函数和数据结构映射来帮助将工作分解为更易于管理的块!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多