我正在开发一个“租车”网络应用程序......所以,用户可以选择日期“从”和“直到”他想租一辆车..这些值存储在单个变量中(见下文) :
//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;
}
我希望我的问题足够明确!
提前致谢!
丹尼斯
答案 0 :(得分:0)
如果您通过JavaScript设置折扣,用户只需修改它并下订单,而不是15%说95%。所以要小心。使用服务器脚本设置价格和折扣而不是使用JavaScript
答案 1 :(得分:0)
我相信@Softberry是对的,你不应该把它放在客户端。
我纳入了@RobG建议的更改。 (
“......此解决方案中构造的所有日期均为GMT + 0 ...”,前提是这是运行脚本的主机的时区,或者您是否使用新日期(Date.UTC(2017,9-1) ,17))。无需提供零值,缺省参数默认为零(日期除外,默认为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整个事物(source和json)< / p>
答案 2 :(得分:-1)
日期只不过是格式化的字符串,因此它可以转换为Date对象,形成自定义日期等。这意味着您可以将其存储为普通字符串,但您需要使用已知的日期格式。 / p>
var date = "2016/02/12"; // for example
但是,使用javascript将折扣日期存储在客户端的浏览器中可以让他完全控制您的javascript数据,因此可以轻松操作和滥用。你肯定应该使用一些后端。