将单个值存储到日期格式中的JavaScript
我正在研究“租赁汽车”网络应用...因此,用户可以选择日期“从”和“直到”他想租赁汽车..这些值被存储进入单变量(见下文):将单个值存储到日期格式中的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设置折扣通过客户端脚本
丹尼斯
我相信@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)
“* ...此解决方案中构建的所有日期均为GMT + 0 ... *”,只有当运行该脚本的主机的时区,或者如果您要使用'New Date(Date.UTC(2017,9- 1.17))'。没有必要提供零值,缺省参数默认为零(日期除外,默认值为1)。 – RobG
非常感谢你的努力! –
设定价格相关的信息可能会造成危险
,用户可以简单地修改并作出裁定,而不是15%的人说95%。所以要小心。集的价格和服务器脚本折扣不使用JavaScript
非常感谢您的努力! –
日期不是别的,只是一个格式化字符串,因此它可以被转换成Date对象,形成定制日期等这意味着,你可以将它保存为一个普通的字符串,但你需要使用已知的日期格式。
var date = "2016/02/12"; // for example
但好,储存折扣日期在客户端的JavaScript的浏览器给他你的JavaScript数据的完全控制,因此它可以很容易被操纵和滥用。你应该肯定使用它的一些后端。
非常感谢你的努力! –
你不用服务器吗?当你可以轻松地将日期存储在服务器上的数据库中时,为什么要将日期存储在变量中,在需要时从服务器获取季节日期,并将其与当前日期进行比较。 –