2016-10-02 61 views
-1

我正在研究“租赁汽车”网络应用...因此,用户可以选择日期“从”和“直到”他想租赁汽车..这些值被存储进入单变量(见下文):将单个值存储到日期格式中的JavaScript

//BACK 
var backDay = parseInt(jQuery('#back_day').val(),10); 
var backMonth = parseInt(jQuery('#back_month').val(),10); 
var backYear = parseInt(jQuery('#back_year').val(),10); 
var backHours = parseInt(jQuery('#back_hour').val(),10); 
var backMinutes = parseInt(jQuery('#back_minute').val(),10); 
//FROM 
var fromDay = parseInt(jQuery('#from_day').val(),10); 
var fromMonth = parseInt(jQuery('#from_month').val(),10); 
var fromYear = parseInt(jQuery('#from_year').val(),10); 
var fromHours = parseInt(jQuery('#from_hour').val(),10); 
var fromMinutes = parseInt(jQuery('#from_minute').val(),10); 
var freeKm = parseInt(jQuery('#freeKm').val(),10); 
var group = jQuery(groupKON).val(); 

如此,是因为老板注意到,在今年需求某些时期较高,在此期间(赛季),他希望增加对汽车租赁的价格。

因此,在以下日期之间价格应该上涨。

saison1 1.3.17-21.5.17 15%价格上涨 saison2 19.06.17-02.07.17 10%价格上涨 saison3 12.09.17-31.10.17 10%价格上涨

我的问题是如何将日期存储到变量中,以便我可以编写条件语句?

例如:

if(date == saison1) { 
function increaseThePrice() { 
newPrice = price*1.5; 
return newPrice; 
} 

我希望我的问题是非常明显的!

在此先感谢!如果你通过JavaScript设置折扣通过客户端脚本

丹尼斯

+0

你不用服务器吗?当你可以轻松地将日期存储在服务器上的数据库中时,为什么要将日期存储在变量中,在需要时从服务器获取季节日期,并将其与当前日期进行比较。 –

回答

0

我相信@Softberry是对的,你不应该把它放在客户端。

我整合了@RobG建议的更改。 (

“......在这个解决方案构建的所有日期为GMT + 0 ......”只有在主机上运行的脚本的时间段,或者如果你是使用新的Date(Date.UTC(2017年,9-1,17))没有必要提供零值,缺省参数默认为0(除了日期,它默认为1)

现在,如果你使用它在客户端或服务器上,问题依然存在。

这里是一个JavaScript的解决方案

/** main logic */ 
function getCostForInterval(basePrice,from,back){ 
    var total=0; 
    var seasonAdjustments=getSeasonPriceMultipliers(); 
    /* iterate through each day of the interval (from-back)*/ 
    for(
    var d=from;/* start */ 
    d.getTime()<=back.getTime();/* end condition */ 
    d.setDate(d.getDate()+1)/* increment by one day */ 
){ 
    total+=basePrice*getAdjustmentForDate(d,seasonAdjustments); 
    } 
    return total; 
} 


/** getAdjustmentForDate returns either 1 or 
    * or the corresponding price multiplier 
    * when the date falls into a season 
    */ 
function getAdjustmentForDate(date,seasons){ 
    var multiplier=1; 
    for(var ix=0;ix<seasons.length;ix++){ 
    var season=seasons[i]; 
    /** if date falls inside current season 
    **/ 
    if(season.begin.getTime()<date.getTime() 
     && date.getTime()<season.begin.getTime()){ 
     return season.multiplier; 
    } 
    } 
    /** if date doesn't fall inside any 
    * of the season intervals */ 
    return multiplier; 
} 

/*** getSeasonPriceMultipliers 
    ** returns an array of intervals where 
    ** price modifications may apply 
    ** 
    ** you can change the data retrieving mechanism 
    ** from hard coded to an http/ajax call 
***/ 
function getSeasonPriceMultipliers(){ 
    var saisons=[ 
    { 
    begin : new Date(Date.UTC(2017,3-1,1,0,0,0)), 
    end : new Date(Date.UTC(2017,5-1,21,23,59,59)), 
    multiplier : 1.15 
    }, 
    { 
    begin : new Date(Date.UTC(2017,6-1,19,0,0,0)), 
    end : new Date(Date.UTC(017,7-1,2,23,59,59)), 
    multiplier : 1.10 
    }, 
    { 
    begin : new Date(Date.UTC(2017,9-1,17,0,0,0)), 
    end : new Date(Date.UTC(2017,10-1,31,23,59,59)), 
    multiplier : 1.10 
    } 
]; 
    return saisons; 
} 

和测试

function test(BASE_PRICE,backDay,backMonth,backYear, backHours,backMinutes, 
fromDay,fromMonth,fromYear,fromHours,fromMinutes 
){ 
var from=new Date(fromYear,fromMonth,fromDay,fromHours,fromMinutes,0) 
var back=new Date(backYear,backMonth,backDay,backHours,backMinutes,0) 
return getCostForInterval(BASE_PRICE,from,back) 
} 

解决方案不考虑时间段,在此解决方案构建的所有日期为GMT + 0。 应该知道检索点与回归点之间的时区差异。如果价格是每天夏季转移不会造成问题,如果价格是每小时,您需要相应地调整。

如果你在客户端使用javascript,我建议在IIFE中包装这整个东西,并只公开函数getCostForInterval,使用http调用来检索函数getSeasonPriceMultipliers中的季节数据,并最终uglify整个事情(源和json)

+0

“* ...此解决方案中构建的所有日期均为GMT + 0 ... *”,只有当运行该脚本的主机的时区,或者如果您要使用'New Date(Date.UTC(2017,9- 1.17))'。没有必要提供零值,缺省参数默认为零(日期除外,默认值为1)。 – RobG

+0

非常感谢你的努力! –

0

设定价格相关的信息可能会造成危险

,用户可以简单地修改并作出裁定,而不是15%的人说95%。所以要小心。集的价格和服务器脚本折扣不使用JavaScript

+0

非常感谢您的努力! –

-1

日期不是别的,只是一个格式化字符串,因此它可以被转换成Date对象,形成定制日期等这意味着,你可以将它保存为一个普通的字符串,但你需要使用已知的日期格式。

var date = "2016/02/12"; // for example 

但好,储存折扣日期在客户端的JavaScript的浏览器给他你的JavaScript数据的完全控制,因此它可以很容易被操纵和滥用。你应该肯定使用它的一些后端。

+0

非常感谢你的努力! –

相关问题